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

前端之家收集整理的这篇文章主要介绍了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?
};

我不明白如何在内部函数调用中没有类型错误.我想这与泛型有关.不能找出一种重写的方法.

最佳答案
Datum界面太宽泛了.它基本上可以表示任何对象(即可以通过字符串进行索引,并且索引操作的结果为任意).

如果对象类型太宽,则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
};
原文链接:https://www.f2er.com/js/531216.html

猜你在找的JavaScript相关文章