使用延迟初始化将符号定义为属性

时间:2018-05-05 04:46:41

标签: javascript node.js typescript ecmascript-6 typescript2.0

我有这个:

export const symbols = {
  toString: Symbol('@xml.js.toString')
};

export class Node {

  [key: string]: any;

  [symbols.toString] = function(){

  };

}

但是我收到了这个错误:

enter image description here

这是:

  

类属性声明中的计算属性名称必须引用   表达式,其类型是文字类型或唯一符号类型。

任何人都知道发生了什么事?

如果我把它放在构造函数中,我不会收到错误:

enter image description here

1 个答案:

答案 0 :(得分:2)

如错误所述,只有唯一符号可用作计算属性名称。

the reference中所述,

  

要将符号视为唯一文字,可以使用新类型唯一符号。唯一符号是符号的子类型,仅通过调用Symbol()或Symbol.for()或显式类型注释生成。新类型仅允许在const声明和只读静态属性上,并且为了引用特定的唯一符号,您必须使用typeof运算符。每个对唯一符号的引用都意味着一个与给定声明相关的完全唯一的身份。

由于列出的限制,对象属性不能是唯一的。

相反,它可以是:

export namespace symbols {
  export const toString = Symbol('@xml.js.toString');
};