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

时间:2017-01-02 09:56:00

标签: 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
        }
    })
}

但是&#34; bar&#34;在函数的第一行用红线标出,表示:

  

TS2322:输入&#39; {foo:string;} []&#39;不能分配给&#39; T []&#39;。输入&#39; {foo:string}&#39;不能分配给&#39; T&#39;。

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

1 个答案:

答案 0 :(得分:5)

您需要键入断言返回的T以键入function simplifiedExample<T extends Fooable>(bars: string[]): T[] { return bars.map(bar => { return { foo: bar } as T; }) }

T

code in playground

原因是Fooable不是interface Mooable extends Fooable { moo: string; } simplifiedExample<Mooable>(["a", "b", "c"]); ,它只是扩展了它,但可能有其他属性,例如:

T

在这种情况下,Mooable{ foo: bar },但$car_all_attributes[$f_key]['old_price'] = $car_fare; $car_all_attributes[$f_key][$key] = $cars; 并不满足,这就是您需要输入强制转换的原因。