TypeScript中的条件类型问题

TypeScript中的条件类型问题,typescript,conditional-types,Typescript,Conditional Types,这是一个复杂代码的简化示例: type ValueType=[T]扩展[string]?价值:价值; 接口值{ 集合(v:T):无效 } 导出类型Bar=T扩展是否为真?布尔数 函数foo(vt:ValueType,v:Bar){ 设置(v);错误是什么 以下是您得到的错误: Argument of type 'Bar<T>' is not assignable to parameter of type 'string & Bar<T>'. Type 'nu

这是一个复杂代码的简化示例:

type ValueType=[T]扩展[string]?价值:价值;
接口值{
集合(v:T):无效
}
导出类型Bar=T扩展是否为真?布尔数
函数foo(vt:ValueType,v:Bar){
设置(v);错误是什么
以下是您得到的错误:

Argument of type 'Bar<T>' is not assignable to parameter of type 'string & Bar<T>'. 
  Type 'number | boolean' is not assignable to type 'string & Bar<T>'. Type 'number' is not assignable to type 'string & Bar<T>'. 
    Type 'number' is not assignable to type 'string'. 
       Type 'Bar<T>' is not assignable to type 'string'. Type 'number | boolean' is not assignable to type 'string'. 
类型为“Bar”的参数不能分配给类型为“string&Bar”的参数。
类型“number | boolean”不可分配给类型“string&Bar”。类型“number”不可分配给类型“string&Bar”。
类型“number”不可分配给类型“string”。
类型“Bar”不可分配给类型“string”。类型“number | boolean”不可分配给类型“string”。
因此根本原因是
类型“Bar”不可分配给类型“string”。类型“number | boolean”不可分配给类型“string”。
出现此错误非常有意义,我们将在下面对此进行解释

解释 事实1: 基于导出类型Bar=T扩展为true?布尔值:数字

  • 条形图只能是
    boolean
    number
事实2: 基于
type ValueType=[T]扩展[string]?值:Value;

  • 表示
    ValueType
    可以是
    Value
事实3: 基于
foo(vt:ValueType,v:Bar)

  • 使用事实2,意味着
    意味着vt.set可以获取字符串
决议
基于事实1(只能是
布尔值
数字
)和事实2(可以是
字符串
)我们从TypeScript中得到错误消息:
Type'number | boolean'不能分配给Type'string'

您的
Bar
ValueType
别名在这里是多余的。您能提供一个例子吗?@PatrickRoberts不确定您的意思。您的例子没有失败。我的失败。所以您的例子不同。“你的例子”(打字错误在5分钟后无法纠正)我不明白为什么
vt.set
可以使用
string
。因为
Bar
只能是
boolean
number
。因此
[number | boolean]扩展[string]
是错误的。