当TS从输入集合推断时,其默认行为是获取集合的第一个成员。
当存在不止一种可能的类型时,这是令人沮丧的,理想情况下TS会推断出并集。
有关的示例,请参见TS游乐场
有人知道是否有办法推断出一个联盟,而不仅仅是第一个成员的类型吗?
这可以通过扩展{ value: any }
:的泛型类型来实现
class InferValue<T extends { value: any }>{
constructor(
data: T[]
){}
}
const test = new InferValue([
{value: 1},
{value: 'string'}
])
const test2 = new InferValue([
{value: 'string'},
{value: 1},
])
这是带工作代码的TS游乐场。