然后给出以下内容:
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?
};
最佳答案
Datum界面太宽泛了.它基本上可以表示任何对象(即可以通过字符串进行索引,并且索引操作的结果为任意).
原文链接:https://www.f2er.com/js/531216.html如果对象类型太宽,则Datum和Datum []和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 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
};