首页 > 解决方案 > 关于 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不是对象键。为什么?

标签: typescriptobjectkeysymbols

解决方案


这就是 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]]);


推荐阅读