TypeScritp通用组合类型定义

时间:2018-03-09 08:58:42

标签: typescript generics

我想知道以下TypeScript类型声明之间是否存在任何功能差异:
object: Observable<number> | Observable<number[]>
object: Observable<number | number[]>
如果是这样,它们是什么,如果不是,那么定义这样的首选方式是什么?

1 个答案:

答案 0 :(得分:1)

我更喜欢第二个。请考虑以下示例(不使用observable,但使用简单的Set对象)

const something: Set<number> | Set<number[]> = new Set();
const something2: Set<number | number[]> = new Set();

something.add(2);  // Cannot invoke an expression whose type lacks a call signature. Type '((value: number) => Set<number>) | ((value: number[]) => Set<number[]>)' has no compatible call signatures.
something.add([2, 3, 4]); // Cannot invoke an expression whose type lacks a call signature. Type '((value: number) => Set<number>) | ((value: number[]) => Set<number[]>)' has no compatible call signatures.

something2.add(2);
something2.add([2, 3, 4]);

正如您所看到的,第一个只有在您编译某些对象时才能工作,在这种情况下,这些对象将成为代码中不必要的噪音:

(something as Set<number>).add(2);
(something as Set<number[]>).add([2, 3, 4]);
相关问题