Как я могу использовать комментарии JSDoc, чтобы объявить компилятору TypeScript, что «тип X имеет все свойства типа Y, а также эти другие свойства»?
Дано:
/**
A base type with one property.
@typedef {object} Base
@prop {string} name
*/
/**
A subtype that adds a second property.
@typedef AugmentedBase
@type {Base}
@prop {number} age
*/
/**
A function declared to return AugmentedBase, so name + age.
@returns {AugmentedBase}
*/
const shouldReturnAugmentedBase = () => {
return {name: 'a', age: 3}
}
Когда:
Я проверил это, запустив:
tsc --allowJs --checkJs --noEmit index.js
Тогда:
Я не ожидаю ошибок при проверке с помощью TypeScript.
Но:
Фактически, он, кажется, игнорирует свойство, добавленное AugmentedBase
, и обрабатывает его как только Base
, судя по этой ошибке:
ошибка TS2322: тип '{ name: string; age: number; }'
нельзя назначить типу 'Base'
.
Литерал объекта может указывать только известные свойства, а 'age'
не существует в типе 'Base'
.
Обратите внимание на то, что буквально объект не совпадает с Base
, несмотря на аннотацию @returns {AugmentedBase}
!
Почему:
Я пишу JavaScript в Visual Studio Code и хочу максимально использовать возможности TypeScript.