Я использую cleave.js (^ 1.5.2) в приложении Angular 6 вместе с пакетом @types/cleave.js (^ 1.4.0), и происходит странная вещь. Если я запускаю ng build для сборки приложения, оно завершается со следующими ошибками:
ERROR in src/app/app.component.ts(4,8): error TS1192: Module '"C:/Users/evcomes/Angular2/hellogular/node_modules/@types/cleave.js/index"' has no default export.
src/app/app.component.ts(5,8): error TS1192: Module '"C:/Users/evcomes/Angular2/hellogular/node_modules/@types/cleave.js/options/index"' has no default export.
Я вижу, что это правда в источнике для @types/cleave.js, но это просто библиотека типов, зачем мне экспорт по умолчанию? И действительно странная часть заключается в том, что если я затем изменяю (незначительно) файл, а затем сохраняю, автоматическая перестройка подбирает это (все еще показывает ошибку, но продолжается), будет счастливо обслуживать приложение angular в разработке и функциональность cleave.js который я использовал, работает даже в моем браузере. Так это не настоящая ошибка? Как я могу отключить его?
Любые учебники или руководства, которые я видел по использованию библиотек DefinitelyTyped, просто говорят, что их установка npm должна быть достаточной для их использования без каких-либо других модификаций, поэтому большинство проблем, которые я обнаруживаю при поиске, связаны с тем, что люди пытаются создать свой собственный TypeScript. привязки для JS-библиотек или собственных модулей в целом.
В package.json:
...
"@types/cleave.js": "^1.4.0",
"cleave.js": "^1.5.2"
...
В моем tsconfig.json:
...
"esModuleInterop": true,
"typeRoots": [
"node_modules/@types"
]
...
В моем app.component.ts:
...
import Cleave from 'cleave.js';
import CleaveOptions from 'cleave.js/options'
...
Ах, ладно, import * as CleaveOptions... сработало, но когда я делаю это только для Cleave, появляется другая ошибка: ERROR in src/app/app.component.ts(4,25): error TS2497: Module '"C:/Users/evcomes/Angular2/hellogular/node_modules/@types/cleave.js/index"' resolves to a non-module entity and cannot be imported using this construct. Источник этого файла можно увидеть здесь: github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/…
export = Cleave; означает, что вам нужно установить allowSyntheticDefaultImports: true в свой tsconfigЭто сработало вместе с использованием формы import Cleave from 'cleave.js'. Вы хотите сделать из этого ответ, чтобы я мог дать вам репутацию?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Большинство js-библиотек, которые получают типы TS, используют либо ...* as....
Или потребуйте allowSyntheticDefaultImports: true в tsconfig, чтобы экспорт по умолчанию работал правильно.
import * as CleaveOptions from 'cleave.js/options'
// AND
import Cleave from 'cleave.js'
//tsconfig.json
...
{
allowSyntheticDefaultImports: true
}
...
Вы импортируете оба по умолчанию. Попробуйте
import * as Cleave from 'cleave.js'илиimport { Cleave } .... Что показывает файл типизации как экспорт?