我不确定如何将其表达出来,所以这里有个例子
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并可以在编译器中修复的东西吗?还是我错过了一些东西?