如何解决如何从TypeScript中的未知类型对象中读取密钥
以下代码段无法与typescript@4.0.2
一起编译。
const foo: unkNown = {bar: 'baz'}
if (foo && typeof foo === 'object' && 'bar' in foo) {
console.log(foo.bar)
}
出现tsc错误
Property 'bar' does not exist on type 'object'.
如何使tsc
相信foo可以具有无需显式强制转换的任意命名的键?
这里是游乐场链接。 https://www.typescriptlang.org/play?#code/MYewdgzgLgBAZiEAuGBXMBrMIDuYYC8MA3gEYCGATigOQUBeNAvgFAsCWcMAFAiDADIBMKAE8ADgFMQXPoQJEaIUgCtJwKDUHC6VLe3x8AlCRYwYoSCAA2kgHTWQAc16I7FSkZZMgA
解决方法
看看user defined typeguard。您可以使用以下方法检查元素是否属于类型:
type Bar = {bar: string};
function isBar(element: unknown): element is Bar {
return (element as Bar).bar !== undefined;
}
const foo: unknown = {bar: 'baz'}
if (isBar(foo)) {
console.log(foo.bar)
}
,
类型unknown
是类型安全的,因此解决此问题的一种方法是将对象foo
强制转换为any
或将bar
转换为接口属性。
const foo: unknown = {bar: 'baz'};
console.log((foo as any).bar);
OR
const foo: unknown = {bar: 'baz'};
interface HasBar {
bar: string;
}
console.log((foo as HasBar).bar);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。