如何在Typescript中进行适当的通用协调?

时间:2017-06-28 10:19:46

标签: typescript typescript-generics

在这种情况下:

interface IValue {a:string}
interface IFactory<T> { make():T }

class Factory{
    make(): IValue { return {a: 'a'}; }
}

const b = function<T extends IValue>(factory?: IFactory<T>): T {
    return factory.make() || new Factory().make(); // marked as invalid
    // With error:TS2322:Type 'IValue' is not assignable to type 'T'.
};

b函数可选择接受值工厂,或者默认情况下会生成。这是我所拥有的更复杂代码的简化示例。

我理解IValue!= T(T显示为IValue的孩子),但我应该如何进行协调,以期不仅可以与IValue的孩子一起工作,还可以包括精确的IValue输入自己?

1 个答案:

答案 0 :(得分:0)

将返回结果转换为T并进行编译。 但还有另一个错误:如果factory无效,则会在运行时导致错误。我已经修好了。请检查以下代码。

const b = function <T extends IValue>(factory?: IFactory<T>): T {
    //return factory.make() || <T>new Factory().make(); // runtime error
    return <T>(factory || new Factory()).make();
};