【发布时间】:2021-02-03 07:19:43
【问题描述】:
这是一个复杂代码的简化示例:
type ValueType<T> = [T] extends [string] ? Value<string> : Value<T>;
interface Value<T> {
set(v: T): void
}
export type Bar<T> = T extends true ? boolean : number
function foo<T>(vt: ValueType<Bar<T>>, v: Bar<T>) {
vt.set(v); <-- error here
}
最新的 TypeScript (v4.1.3) 在语句 vt.set(v) 上失败:
“Bar”类型的参数不能分配给“string & Bar”类型的参数。
这种行为是记录在某处还是一个错误?
【问题讨论】:
-
您的
Bar和ValueType别名在这里是多余的。你能提供一个removing them would not be trivial的例子吗? -
@PatrickRoberts 不确定你的意思。你的例子没有失败。我的失败。所以你的例子是不同的。
-
“你的例子”(5分钟后无法修复错字)
标签: typescript conditional-types