Если вы включите noImplicitAny
, вы получите ошибки во всех трех назначениях, потому что свойство символа не объявлено, а A
не имеет подписи индекса. Вы можете объявить свойство следующим образом:
const s: unique symbol = Symbol('sym');
class A {
[s]: number;
}
let a = new A();
a[s] = 2; // OK
a[s] = 'f'; // Error
a[s] = new Date(); // Error
(Обратите внимание, что называть Symbol('sym')
a unique symbol
немного неправдоподобно. Попробуйте вместо этого использовать Symbol()
. Я помню, как обсуждалась проблема, но сейчас не могу ее найти.)