Определите символ как свойство, используя ленивую инициализацию - PullRequest
0 голосов
/ 05 мая 2018

У меня есть это:

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 голосов
/ 05 мая 2018

В качестве состояния ошибки в качестве имен вычисляемых свойств могут использоваться только уникальные символы.

Как описано в ссылка ,

Чтобы включить обработку символов как уникальных литералов, доступен новый тип уникального символа. уникальный символ является подтипом символа и создается только из вызова Symbol () или Symbol.for () или из явных аннотаций типа. Новый тип разрешен только в объявлениях const и статических свойствах только для чтения, и для ссылки на определенный уникальный символ вам придется использовать оператор typeof. Каждая ссылка на уникальный символ подразумевает полностью уникальную идентичность, которая связана с данной декларацией.

Из-за перечисленных ограничений свойство объекта не может быть уникальным.

Вместо этого это может быть:

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