我试图理解为什么当对象类型与字符串类型相交时,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 处理此类交集的方式上遗漏了什么?
如能就此行为做出任何澄清,我们将不胜感激。谢谢!
我有一个 CopyOnWriteArrayList,因为我的代码应该是线程安全的。List friuts = new CopyOnWriteArrayList<>();我不想在列表中有重复的 friuts,我不能使用 Set,因为我想要
我有一个 CopyOnWriteArrayList 因为我的代码应该是线程安全的。List friuts = new CopyOnWriteArrayList<>();
我不想在列表中有重复的水果,我不能使用 Set,因为我也想有插入顺序。我写了这段代码
public boolean add(String friut) {
synchronized (friuts) {
if (friuts.contains(friut)) {
return false;
}
friuts.add(friut);
}
return true;
}
据我所知,CopyOnWriteArrayList 已经是并发的了。因此,在同步块中添加 CopyOnWriteArrayList.add 对我来说似乎不是一个好主意。还有其他更好的解决方案吗?