javascript - 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 代码, wah
TypeScript 等效的方法是什么?有人可以提供几行可以实际运行和打印出来的 TypeScript 代码,33
就像66
上面的 JS 代码一样,但是在 TypeScript Playground 或类似于 JSFiddle 的东西中?
解决方案
我认为这是一个不好的面试问题,因为它太开放了。无论如何,您可以限制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
当您将其更改let someName
为不为其分配任何类型时,默认情况下它假定它是string
类型,可以是任何类型。因此,当您将其限制为同时也是对象键的两个字符串文字的联合时,警告就会消失。
推荐阅读
- excel - 如何打开personal.xlsb并在所有打开的excel和csv文件上自动运行宏?
- python - python/pandas:将月份整数转换为“int”数据类型的实际月份名称
- php - 使用 PHP SDK 解析服务器聚合
- c++ - 如何在 cmake 中使用 COMPONENTS 配置项目
- javascript - 跳过禁用选项
- ios - 从图像收集制作的视频需要大量时间才能播放
- python - 如何在python中为索引j和i之间的干净位编写位掩码?
- c# - 我很好奇在某个时间只检查一次的逻辑
- web-hosting - 我可以在 squarespace 中构建我的主页,并为同一域上的其他网站提供自定义代码吗
- python - 带有 Keras 和 MXNet 模型的 AWS Deeplens:未找到符号“数据”的 ValueError