javascript - 使用 Array.map (TypeScript) 返回通用数组

标签 javascript arrays oop generics typescript

我写了一个函数来获取一个字符串数组并应该将它转换成一个 T 数组:

interface Fooable {
    foo: string;
}

function simplifiedExample<T extends Fooable>(bars: string[]): T[] {
    return bars.map(bar => {
        return {
            foo: bar
        }
    })
}

但是函数第一行的“bars”这个词用红线标出,表示:

TS2322: Type '{foo:string;}[]' is not assignable to type 'T[]'. Type '{foo:string}' is not assignable to type 'T'.

我怎样才能让它发挥作用?

最佳答案

您需要对返回的 Fooable 进行断言以键入 T:

function simplifiedExample<T extends Fooable>(bars: string[]): T[] {
    return bars.map(bar => {
        return {
            foo: bar
        } as T;
    })
}

( code in playground )

原因是 T 不是 Fooable,它只是扩展它但可能有额外的属性,例如:

interface Mooable extends Fooable {
    moo: string;
}

simplifiedExample<Mooable>(["a", "b", "c"]);

在这种情况下 TMooable 但是 { foo: bar } 不满足它,这就是为什么你需要输入 cast .

关于javascript - 使用 Array.map (TypeScript) 返回通用数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41424558/

相关文章:

javascript - Context Api 状态没有改变

javascript - 将事件参数传递给自定义指令

arrays - 如何附加到作为 Swift 字典中值的数组

javascript - 为什么我的 jqueryUI 自动完成显示在左上角?

javascript - for循环检查三个数组的索引是否匹配,如果匹配则创建不同的对象

python - 循环获取两条用户输入并保存到全局列表

php - 身份验证是我的域还是我的应用程序的问题?

JavaScript 伪类模式

c# - 如何使用 Javascript 解密

javascript - 如何在 onPress 函数中访问 React Native 标签或元素的属性?