打字稿泛型受扩展限制,从函数返回

时间:2018-07-10 21:25:13

标签: javascript typescript types tsc

我不确定如何将其表达出来,所以这里有个例子

type NonVoid = Object | object;

type Something<T> = {
    test: string
} & (T extends NonVoid ? {
    requiredWhenNonVoid: T
} : {
    requiredWhenNonVoid?: undefined
});


function testFunc1<A extends NonVoid>(a: A): Something<NonVoid> {
    return {
        test: 'test',
        requiredWhenNonVoid: a
    };
}

function testFunc2<A extends NonVoid>(a: A): Something<A> {
    return {
        test: 'test',
        requiredWhenNonVoid: a // <-- why error here? A cannot be void??
    };
}

在操场上:click here

问题是,为什么testFunc2出现以下错误

  

键入'{test:字符串; requiredWhenNonVoid:A; }”不能分配给“ Something”类型。     对象文字只能指定已知的属性,但是'Something'类型中不存在'requiredWhenNonVoid'。您是要写'requiredWhenNonVoid'吗?

似乎编译器不知道Something只能是

type Something<T> = {
    test: string
} & {
    requiredWhenNonVoid: T
};

在这种情况下。

这是应该归类为Bug并可以在编译器中修复的东西吗?还是我错过了一些东西?

0 个答案:

没有答案