我试图理解为什么当对象类型与字符串类型相交时,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 处理此类交集的方式上遗漏了什么?
如能就此行为做出任何澄清,我们将不胜感激。谢谢!
我有一个多处理线程池,主线程上运行着一个循环。主循环必须在不被阻塞的情况下运行:它在启动时向线程池发出任务,并且只要所有结果都已
我有一个多处理线程池,主线程上运行着一个循环。主循环必须在不被阻塞的情况下运行:它在启动时向线程池发出任务,并且每当处理完所有结果并计算出一组新结果时,它都会计算出一组新结果,同时检索那些可用的结果,即使池仍然很忙。
import multiprocessing as mp
def double(x):
return x * 2
pool = mp.Pool()
items = [1, 2, 3, 4]
result = None
while True:
if result:
for value in result.get():
print(value)
if not result or result.ready():
result = pool.map_async(double, items)
print("This should still execute even when results aren't ready!")
尽管所有文档都同意 map_async
应该是非阻塞的,但整个 while True
循环都会等待,直到它们准备就绪。这似乎是由触发的, result.get()
但如果使用,即使这样也不应该阻塞主循环, map_async
因此有一种 result.ready()
方法可以检查整个任务是否已完成。是否有非阻塞版本 result.get()
或我必须使用的其他方法?