微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从TypeScript中的未知类型对象中读取密钥

如何解决如何从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)
}

Playground

,

类型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 举报,一经查实,本站将立刻删除。