amw*_*l04 5 javascript typescript
然后给出以下内容:
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?
};
Run Code Online (Sandbox Code Playgroud)
我不明白,我怎么不明白一个type error上inner function call。我想这与generic. 想不出重写的方法。
接口Datum太宽泛了。它将基本上表示任何对象(即可以通过字符串进行索引,并且索引操作的结果是any)。
鉴于对象类型太宽,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
};
Run Code Online (Sandbox Code Playgroud)
或者正如 @PatrickRoberts 在评论中提到的,您可以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
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3594 次 |
| 最近记录: |