🔎 搜索词
Map类型
未知
🕗 版本与回归信息
- 在版本4.7.4和4.8.4之间发生了变化
⏯ Playground链接
https://www.typescriptlang.org/play?ts=5.4.0-dev.20231206#code/CYUwxgNghgTiAEYD2A7AzgF3gVwFw5QGsUkB3FAbgCgqMBPABwQEF4BeeAbwG0BpeAJYp4KEADcQMALr4oKOgF8qAemXx1APQD8NVfABySeAFEYMJDCrJ0WKPhTYIEeAB8CoAGZCQwV1wXsONR66vDaumqm5pbWmPAARvaOzm7YKJ7evm6sHNjBaqHhQA
💻 代码
declare const u: unknown;
type A = {[K in never]: any}
// ^?
// No Error
const a: null | undefined | {} = u;
// ^?
// Error
const b: null | undefined | A = u;
// ^?
🙁 实际行为
类型 a
和 b
似乎相同,但仅将 b
赋值给它们会导致错误。
🙂 预期行为
我不确定哪个更好,我认为要么没有错误,要么两个都有错误。
关于问题的附加信息
在版本4.7.4中,两者都是错误。
6条答案
按热度按时间cnjp1d6j1#
Map类型应该做什么?
无论如何,这似乎是有意为之的:https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-8.html#improved-intersection-reduction-union-compatibility-and-narrowing
TypeScript现在认识到这一点,并允许从
unknown
到{} | null | undefined
的赋值。kokeuurv2#
如果将
unknown
分配给null | undefeind | {}
是有意为之的,那么a
的行为是正确的,但b
不应该是一个错误。jv2fixgn3#
我建议将示例简化为类似于
type A = {[K in never]: any}
的内容,这样可以重现行为,而不会出现条件类型的干扰。相关:#49119 和 #49119(评论)
dl5txlt94#
嗯,看起来问题不是我Map了
{}
,而是我创建了一个带有never
键的类型。vfh0ocws5#
我猜想这个问题的钢化版本看起来像这样:
$x_1a^b_1^x$
kmb7vmvb6#
I'm not committing to take a fix for this since it's pretty niche, but if it's straightforward and doesn't break/slow down something else, we can take a PR