Как использовать экспортированные типы из внешних файлов .d.ts?

73
11

Я пытаюсь использовать @types/youtube для предоставления типов для моего приложения, но компилятор TypeScript не включает эти типы в сборку.

Я установил зависимость @types/youtube и ссылаюсь на типы из кода, устанавливая переменные, такие как const ytPlayerState = YT.PlayerState.PLAYING, но выходной код не компилируется в значения вместо имен этих констант. Я попытался поместить node_modules/@types в typesRoots и youtube в разделы types, учитывая, что некоторые значения по умолчанию у меня не работают по какой-то причине, и попытался использовать <reference.../>. Ни один из них не работал для меня.

  // options for YT player to load iframe
private playerVariables = {
enablejsapi: YT.JsApi.Enable,
version: 3,
autohide: YT.AutoHide.HideAllControls,
autoplay: YT.AutoPlay.AutoPlay,
color: 'red',
theme: 'dark',
iv_load_policy: YT.IvLoadPolicy.Hide,
modestbranding: YT.ModestBranding.Modest,
rel: YT.RelatedVideos.Hide,
showinfo: YT.ShowInfo.Hide,
cc_load_policy: YT.ClosedCaptionsLoadPolicy.UserDefault,
};

Ожидаемый результат после компиляции:

       _this.playerVariables = {
enablejsapi: 1,
version: 3,
autohide: 1,
autoplay: 0,
color: 'red',
theme: 'dark',
iv_load_policy: 3,
modestbranding: 1,
rel: 0,
showinfo: 0,
cc_load_policy: 0,
};

Фактический результат:

       _this.playerVariables = {
enablejsapi: YT.JsApi.Enable,
version: 3,
autohide: YT.AutoHide.HideAllControls,
autoplay: YT.AutoPlay.AutoPlay,
color: 'red',
theme: 'dark',
iv_load_policy: YT.IvLoadPolicy.Hide,
modestbranding: YT.ModestBranding.Modest,
rel: YT.RelatedVideos.Hide,
showinfo: YT.ShowInfo.Hide,
cc_load_policy: YT.ClosedCaptionsLoadPolicy.UserDefault,
};

спросил(а) 2019-04-16T18:14:00+03:00 1 год, 7 месяцев назад
1
Решение
101

Как упоминалось в разделе комментариев @pswg, причина такого поведения в том, что enums не объявляются как const s. Добавление const к перечислениям устраняет проблему.

Ссылка: https://www.typescriptlang.org/docs/handbook/enums.html#const-enums

ответил(а) 2019-04-16T19:47:00+03:00 1 год, 7 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема