gpt4 book ai didi

javascript - typescript 中对象的通用类型数组

转载 作者:搜寻专家 更新时间:2023-10-30 21:09:44 24 4
gpt4 key购买 nike

然后给出以下内容:

interface Datum {
[k: string]: any
}

type Data = Datum[]

const inner = (data: Data) => {
console.log(data)
};


const outer = (data: Data | Data[]) => {
inner(data) // expect type error?
};

我不明白如何在内部函数调用 中没有出现类型错误。我想这与 generic 有关。想不出重写的方法。

最佳答案

Datum 界面太宽泛了。它将基本上表示任何对象(即可由字符串索引并且索引操作的结果是any)。

由于对象类型太宽,DatumDatum[]Datum[][] 都可以分配给数组类型,因此您不会收到任何错误。让界面更具体一点,你会得到一个错误。例如:

interface Datum {

[k: string]: boolean | number | string;
}

type Data = Datum[]

const inner = (data: Data) => {
console.log(data)
};


const outer = (data: Data | Data[]) => {
inner(data) // error now
};

或者正如@PatrickRoberts 在评论中提到的,您可以向接口(interface)添加一个 number 索引,使其与数组明确不兼容:

interface Datum {
[i: number]: never
[k: string]: any;
}

type Data = Datum[]

const inner = (data: Data) => {
console.log(data)
};


const outer = (data: Data | Data[]) => {
inner(data) // error
};

关于javascript - typescript 中对象的通用类型数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55172625/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com