Javascript Typescript:代码看起来相同,但它是';它产生了一个错误
我有这样一个界面:Javascript Typescript:代码看起来相同,但它是';它产生了一个错误,javascript,typescript,Javascript,Typescript,我有这样一个界面: interface Product { [key: string]: { options?: Record<string, string> } } 上面突出显示的一行表示,状态[sku]。选项可以是未定义的,当然我知道没有未定义,因为我之前正在检查该行 但是,这段代码的功能完全相同,并且可以正常工作 const newState = state ?? {} const slice = newState[sku] ??
interface Product {
[key: string]: {
options?: Record<string, string>
}
}
上面突出显示的一行表示,状态[sku]。选项可以是未定义的,当然我知道没有未定义,因为我之前正在检查该行
但是,这段代码的功能完全相同,并且可以正常工作
const newState = state ?? {}
const slice = newState[sku] ?? {}
slice.options = slice.options ?? {}
slice.options[id] = e.target.value
那么,我遗漏了什么呢?这是打字脚本的局限性。如果创建如下类型:
type T = { [key: string]: string | undefined };
然后尝试:
var sth: T = { prop: "abc" };
sth.prop.slice()
您将得到一个错误,因为sth
的定义仍然是通用的T
。它不在乎sth
的一个道具实际上是字符串(也就是说,typescript不会约束sth
的类型)
但当你这样做的时候:
var u = { prop: "abc" };
u.prop.slice()
u
的类型将被限制为
{
prop: string
}
所以这里没有错误。@Pablo您自己找到了解决方法。引入一个辅助变量并使用它:var slice=state[sku]=state[sku]??{}
而不是裸状态[sku]
。
{
prop: string
}