JSDoc аналог `as const` в TypeScript?
У меня есть старая проблема в большом проекте, который слишком велик, чтобы легко переводить его на TypeScript, поэтому я использую JSDoc вместо этого. Однако есть одна особенность TypeScript, которую я не могу воспроизвести в JSDoc — это использование as const
, которое позволяет полностью типизировать имена и значения свойств статического объекта.
// В TypeScript
const anObject = {hello: 'world'} as const;
// (тип показывает {hello: 'world'}, а не {hello: string})
Есть ли эквивалент этому в JSDoc? Я полностью не могу найти ничего, что выполняло бы такую задачу (например, @readonly
и @const
не дают нужного результата), и поэтому мне приходится фактически копировать и вставлять любой статический объект как тип, чтобы корректно типизировать такие случаи, что определенно нарушает принцип DRY.
1 ответ(ов)
С выходом TypeScript 4.5 вы можете использовать следующие конструкции для объявления констант с помощью специального синтаксиса приведения типов:
const foo = /** @type {const} */ ({ x: 1 });
const bar = /** @type {const} */ ("baz");
Обратите внимание, что круглые скобки обязательны; это синтаксис приведения типов, а не обычная аннотация типов. Такой подход позволяет вам явно указать, что переменные foo
и bar
должны иметь значение, которое будет неизменяемым (immutable), что может быть полезно в различных сценариях, включая работу с объектами и литералами.
Опциональные параметры на основе условных типов
Разница между "require(x)" и "import x"
@Directive против @Component в Angular
ESLint: 8.0.0 Не удалось загрузить плагин '@typescript-eslint'
Как создать заглушку для интерфейса / определения типа в TypeScript?