是否可以将文字类型从类型级别转换为打字稿中的术语级别?

时间:2020-07-30 18:11:25

标签: typescript type-systems

例如,我有这种类型,它将返回只能容纳一个可能值的类型:

  export type IfEqual<T, U> =                                                                               
    (<G>() => G extends T ? 1 : 2) extends                                                                                                        
    (<G>() => G extends U ? 1 : 2) ? true : false;     

如果我像下面的示例那样进行声明,则可以得到只能为a的值true和只能为b的值"foo"

  declare const a: IfEqual<'a', 'a'>;     // inferred as true                                                                                                              
  declare const b: IfEqual<'a', 'a'> extends true ? "foo" : "bar";  // inferred as "foo"

因为类型只有一个可能的值,所以我想知道是否有什么办法可以将类型直接转换为相应的值。

1 个答案:

答案 0 :(得分:0)

“我想知道是否有什么办法可以将类型直接转换为相应的值。”

否。

Typescript仅在编译时存在。当代码被编译然后运行时,所有键入信息都消失了。剩下的就是运行的JavaScript。

实际上,如果将代码插入打字稿playground中,您会看到这是右侧窗格,完全是空的。所有类型都消失了。

Typescript不会为您执行任何实际逻辑或计算。相反,它只是确保使用代码库的类型正确编写了计算和逻辑。