我试图理解为什么当对象类型与字符串类型相交时,TypeScript 没有在错误消息中明确显示 never 类型。这是我的代码:type Test1 = { b: numb...
我试图理解为什么当对象类型与字符串类型相交时,TypeScript 没有在错误消息中明确显示 never 类型。这是我的代码:
type Test1 = {
b: number;
c: string;
} & string;
// Type '{ b: number; c: string; }' is not assignable to type 'Test1'.
// Type '{ b: number; c: string; }' is not assignable to type 'string'.
let test1: Test1 = {
b: 1,
c: 'c',
}
// Type 'string' is not assignable to type 'Test1'.
// Type 'string' is not assignable to type '{ b: number; c: string; }'.
let test1: Test1 = 'test1'
在上面的代码中,Test1 被定义为对象类型和字符串的交集。根据我的理解,这应该导致 never 类型,因为没有值可以同时是具有属性的对象 b
和 c
字符串。
Type '{ b: number; c: string; }' is not assignable to type 'Test1'.
Type '{ b: number; c: string; }' is not assignable to type 'string'.
Type 'string' is not assignable to type 'Test1'.
Type 'string' is not assignable to type '{ b: number; c: string; }'.
据我了解,这些应该表明 Test1 实际上是 never 类型,但 TypeScript 似乎没有在错误消息中提到 never。这是 TypeScript 中的错误,还是我在 TypeScript 处理此类交集的方式上遗漏了什么?
如能就此行为做出任何澄清,我们将不胜感激。谢谢!
使用 addIfAbsent()
方法:
CopyOnWriteArrayList<String> fruits = new CopyOnWriteArrayList<>();
public boolean add(String fruit) {
fruits.addIfAbsent(fruit);
}