typescript - 关于 typescript 符号作为对象属性标识符的问题
问题描述
peng@neo-laptop:~/ts-learnings$ tsc --version
Version 3.6.4
虽然代码片段是这样的:
const sym = Symbol('foo');
let o = {
name: "Jessie Tom",
age: 35
};
function extendObject(obj: any, sym: symbol, value: any) {
obj[sym] = value;
}
extendObject(o, sym, 42);
console.log(Object.keys(o));
得到结果:
[
"name",
"age"
]
问题sym
不是对象键。为什么?
解决方案
这就是 Object.keys 的工作原理。它不返回符号。如果需要符号,请使用Object.getOwnPropertySymbols 。
const sym = Symbol('foo');
let o = {
name: "Jessie Tom",
age: 35,
};
function extendObject(obj, sym, value) {
obj[sym] = value;
}
extendObject(o, sym, 42);
console.log(Object.keys(o));
const symbols = Object.getOwnPropertySymbols(o)
console.log(symbols);
console.log(o[symbols[0]]);
推荐阅读
- design-patterns - 依赖倒置的抽象工厂
- python - 如何在我的 gunicorn+flask 项目中使用 flask_migrate
- amazon-ec2 - 为什么在创建 TeamCity 云配置文件时出现 400 Bad Request?
- sql - SQL - 计算一个列值在另一列中的出现
- javascript - Socket.io 在 Webhost 中运行
- python - 为什么 setuptools 安装包的时间比 pip 长?
- html - 如何更新 pdf vewer 的 favicon?
- regex - Reg ex 用于选择和替换包含特定字符串模式的行中的数值
- tensorflow - 使用 TFF 时出现“使用 Hub.KerasLayer 编码时出错”
- elasticsearch - 如何在弹簧数据中保存弹性搜索日期类型?