如何指定一种或另一种

时间:2018-09-03 12:52:40

标签: typescript typescript2.0

这是我要做什么的总要旨

type A = number | any[]  

declare const a: A

a.slice(1) // type error slice does not exist on Type A

Sprite

如果函数的返回值确实可以是数字或数组,该如何指定呢?

我假设|就是这样工作的。

type A = number | string | any[]  

declare const a: A // a can be either a number, string or array

a.slice(0,1) // a is a string or array
.concat([1,2]) // a is an array

1 个答案:

答案 0 :(得分:2)

如果a是数组,则在第一个示例中

type A = number | any[]  

const a: A = []; // add a value like this ts will infer that a is an array 
a.slice(1); 

或者您可以使用投射

(a as any[]).slice(1);

使用TypeScript 2.0,类型检查器分析语句和表达式中所有可能的控制流,以在任何给定位置为声明为具有并集类型的局部变量或参数生成最具体的可能类型(缩小的类型)。

type A = number | string | any[]  

declare const a: A ;  // assigning a value 

if (typeof a === 'string' ){
  console.log(a.toString());
}else if (typeof a === 'number') {
  console.log(a++);
} else if ( a instanceof Array) {
 a.slice(0,1).concat([1,2])
}

TypeScript 2.0: Control Flow Based Type Analysis