Почему определения типов TypeScript для некоторых библиотек npm (например, Facebook SDK) не экспортируются?

Почему в репозитории DefinitherTyped файлы определений типов некоторых библиотек имеют экспорт, а другие - нет? Например, файл определения типа для Facebook SDK не экспортирует, но файл определения типа для Amazon Alexa SDK имеет экспорт.

Я спрашиваю, потому что Facebook SDK - первая библиотека, с которой мне не хватало экспорта. Я обнаружил это, когда попытался import {AuthResponse} from 'facebook-js-sdk', и компилятор пожаловался, что .../node_modules/@types/facebook-js-sdk/index.d.ts' is not a module.

Есть ли какое-то преимущество в исключении экспорта из определений типов, что требует импорта всего SDK (например, import 'facebook-js-sdk') вместо возможности импортировать только несколько типов? Или @types/facebook-js-sdk просто не написан с использованием последних передовых практик TypeScript?

Кроме того, имеет ли стиль определений типов «импортировать все» без экспорта какие-либо недостатки или проблемы, на которые мне следует обратить внимание в моем импортирующем коде?

Наконец, предположим, что кто-то принял PR на добавление экспорта в типизацию Facebook SDK. Будет ли это критическим изменением для существующих клиентов с таким определением типа? (Если это так, это объясняет, почему это не было исправлено!)


person Justin Grant    schedule 13.08.2018    source источник


Ответы (2)


Думаю, автор говорит о @ types / facebook-js-sdk Модуль npm, который предоставляет типы для facebook JS SDK.

И он должен быть импортирован с

import 'facebook-js-sdk';

Тогда вы сможете использовать FB.init(params), а для params потребуется тип InitParams. Так что проверка типов будет работать.

person Fyodor    schedule 19.09.2019

Давайте посмотрим, как предполагается использовать Facebook SDK:

В SDK Facebook для JavaScript нет отдельных файлов, которые необходимо загрузить или установить, вместо этого вам просто нужно включить небольшой фрагмент обычного JavaScript в свой HTML-код, который будет асинхронно загружать SDK на ваши страницы. Асинхронная загрузка означает, что она не блокирует загрузку других элементов вашей страницы.

После этого вы можете использовать SDK, ссылаясь на единственную глобальную переменную FB, определяемую этим фрагментом кода javacsript.

Обратите внимание, что нигде в процессе вам не приходилось ничего import, Facebook SDK не использует модули.

По этой причине объявления типов для Facebook SDK не имеют экспорта - это просто не так, как должен работать базовый код javascript.

person artem    schedule 13.08.2018
comment
Typescript требует определения типов функций и т. Д. Вот что находится в @ types / facebook-js-sdk. - person Roddy; 30.04.2020