TypeScript版本: 3.8.3
搜索词: [类型推断], [部分], [记录], [对象展开]
代码
type Point = {
x: number
y: number
}
type Space = Partial<Record<number, Point>>
function addPointReducer(point: Point, pointId: number, prevSpace: Space): Space {
const prevPoint = prevSpace[pointId]
return {
...prevPoint,
[pointId]: point,
}
}
预期行为:
应该在 ...prevPoint
上抛出错误,因为 Point
不等于 Space
。
实际行为:
没有错误。
** playground链接:**https://www.typescriptlang.org/play/?ssl=1&ssc=1&pln=17&pc=1#code/C4TwDgpgBACg9gSwHbCgXigbwFBSgDwC4okBXAWwCMIAnXKEYsq27AX221EigGUwAhgGNoGGAJrAEAgDYAeAEoQhcGgBM5zajQA0sRCgB8hztgBmpJEKlwkUAWrXxkwJWtIiaACjAHgxZxQ9XxcASTUmCm1gmggAN35hCGJEkQBKFMERLHoVJABnVDBYuMDUDGL41IgAbRCUcIBdTjxY4FIaOxw8PAA6fsrSvx16PDq-JuJ64BG8Dg4gA
相关问题:
3条答案
按热度按时间1wnzp6jl1#
@ahejlsberg 我一直关注着这些,但感觉对于我们关于这些位置的计算属性键的政策还不够了解。它们是否会超出范围?如何进行检查?
mnemlml82#
在SO上,
number
解释了这个问题,并使用https://stackoverflow.com/questions/63037175/typescript-some-strange-spread-allowed-that-breaks-typings和进行了扩展。Ts playground中可以正常运行,但在
s2 { chats: { chats: { '1123': [Object] } } }
中会给出非法结果。nwwlzxa73#
这很可能与 #27273 高度相关。