首页 > 解决方案 > TypeScript 等效于使用括号和变量(作为字符串来访问对象属性)?

问题描述

一位面试官问我这样做的 TypeScript 方式:

const foo = { bar: 33, wah: 66 };

console.log(foo.bar);   // 33
console.log(foo.wah);   // 66


let someName = "bar";
console.log(foo[someName]);    //33

someName = "wah";
console.log(foo[someName]);    // 66

我在网上搜索了 10 分钟(面试官允许的),我找到了 500 或 1000 字的文章,但我仍然不知道它是如何完成的,通过查看 1 行或 2 行示例。 对于可以使用字符串访问属性bar和的 JavaScript 代码, wahTypeScript 等效的方法是什么?有人可以提供几行可以实际运行和打印出来的 TypeScript 代码,33就像66上面的 JS 代码一样,但是在 TypeScript Playground 或类似于 JSFiddle 的东西中?

标签: javascripttypescript

解决方案


我认为这是一个不好的面试问题,因为它太开放了。无论如何,您可以限制someName为“bar”或“wah”,如下所示:

const foo = { bar: 33, wah: 66 };

console.log(foo.bar);   // 33
console.log(foo.wah);   // 66

// Only this line changed.
let someName: "bar"|"wah" = "bar";

console.log(foo[someName]);    //33

someName = "wah";
console.log(foo[someName]);    // 66

TSPlayground 链接

当您将其更改let someName为不为其分配任何类型时,默认情况下它假定它是string类型,可以是任何类型。因此,当您将其限制为同时也是对象键的两个字符串文字的联合时,警告就会消失。


推荐阅读