0

JSDoc аналог `as const` в TypeScript?

13

У меня есть старая проблема в большом проекте, который слишком велик, чтобы легко переводить его на TypeScript, поэтому я использую JSDoc вместо этого. Однако есть одна особенность TypeScript, которую я не могу воспроизвести в JSDoc — это использование as const, которое позволяет полностью типизировать имена и значения свойств статического объекта.

// В TypeScript
const anObject = {hello: 'world'} as const;
// (тип показывает {hello: 'world'}, а не {hello: string})

Есть ли эквивалент этому в JSDoc? Я полностью не могу найти ничего, что выполняло бы такую задачу (например, @readonly и @const не дают нужного результата), и поэтому мне приходится фактически копировать и вставлять любой статический объект как тип, чтобы корректно типизировать такие случаи, что определенно нарушает принцип DRY.

1 ответ(ов)

1

С выходом TypeScript 4.5 вы можете использовать следующие конструкции для объявления констант с помощью специального синтаксиса приведения типов:

const foo = /** @type {const} */ ({ x: 1 });
const bar = /** @type {const} */ ("baz");

Обратите внимание, что круглые скобки обязательны; это синтаксис приведения типов, а не обычная аннотация типов. Такой подход позволяет вам явно указать, что переменные foo и bar должны иметь значение, которое будет неизменяемым (immutable), что может быть полезно в различных сценариях, включая работу с объектами и литералами.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь