2017-06-29 38 views
1

是否可以根据条件在流中键入变量?类似这样的:流程中的条件类型

const type = 'xyz'; 
const a: (type === 'xyz') ? number : string; 
+1

不,它不是。这是一个非常奇怪的要求。你希望能用这个来实现什么? –

+0

我有两个相当复杂的类型。根据一些函数参数,变量是一个或另一个。但我想我只能用两者的联盟来代替。 – Kiechlus

回答

2

简短的回答是否定的。变量必须绑定到单个类型,其中可以包含类似number | string的联合类型。在条件块内部流可以推断出更专门化的类型。例如:

const a: number | string = "foo"; 
if(typeof a === "string"){ 
    a.split(); // OK! 
} else { 
    a.split(); // Error! a is a number 
} 

但要注意的是,这些条件分支是静态的,它在编译时是什么类型将是内部的各个保障。