访问length
属性时出现错误。我知道可以通过只检索一次对象然后执行undefined
-检查来解决问题。或者只是添加一个!
。但我想了解为什么会这样,并找出是否有更好的解决方案。这是人为的示例:
type MyMap<K extends string> = { [key in K]: string|undefined }
const getValueLength = (tmp:MyMap<string>, key:string) => {
return tmp[key] !== undefined && tmp[key].length
}
我在严格模式下运行Typescript 3.3。
Here is a similar question的问题在于在另一个函数中进行了检查,而不是这里的问题。
答案 0 :(得分:1)
访问键被视为一个函数调用,它可能会改变您正在查看的对象/值,因此不能保证tmp[key]
的第一次调用和第二次调用会找到相同的东西。
为避免这种情况,请确保只调用一次:
type MyMap<K extends string> = { [key in K]: string | undefined };
const getValueLength = (tmp: MyMap<string>, key: string) => {
const str = tmp[key];
return str !== undefined && str.length;
};