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