访问 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问题是在另一个函数内部进行了检查,这不是这里的问题。
最佳答案
访问 key 被视为函数调用,这可能会改变您正在查看的对象/值,因此不能保证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;
};
关于typescript - 检查后仍出现 "Object is possibly undefined"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56109971/