В соответствии с этой система типизированных статей для typescript 2.0 изменилась, и поэтому неясно, как присоединить пользовательские типизации сейчас. Должен ли я всегда создавать пакет NPM для этого?
Заранее благодарю вас!
В соответствии с этой система типизированных статей для typescript 2.0 изменилась, и поэтому неясно, как присоединить пользовательские типизации сейчас. Должен ли я всегда создавать пакет NPM для этого?
Заранее благодарю вас!
Вы можете создавать локальные настраиваемые типизации только для своего проекта, где вы можете объявлять типы для библиотек JS. Для этого вам необходимо:
Создайте структуру каталогов, чтобы сохранить файлы объявления типа, чтобы ваша структура каталогов выглядела примерно так:
.
├── custom_typings
│ └── some-js-lib
│ └── index.d.ts
└── tsconfig.json
В файле index.d.ts
добавьте объявление для вашей библиотеки JS:
declare module 'some-js-lib' {
export function hello(world: string): void
}
Добавьте ссылку на объявление этого типа в разделе compilerOptions
вашего tsconfig.json
:
{
"compilerOptions": {
...
"typeRoots": ["node_modules/@types", "custom_typings"]
},
...
}
Используйте объявленный модуль в своем коде:
import { hello } from 'some-js-lib'
hello('world!')
Предполагая, что ваш внешний js-пакет установлен под node_modules, я думаю, что есть два варианта:
предоставить файл объявления typescript в пакете и добавить ссылку на него:
// node_modules/secret-package/index.d.ts
export interface SecretInterface {
// ¯\_(ツ)_/¯
}
И ссылайтесь на файл типизации в package.json:
// node_modules/secret-package/package.json
{
...,
"typings": "./index.d.ts",
...,
}
добавьте модуль в файл объявления вашего проекта
// index.d.ts
declare module 'secret-package' {
interface SecretInterface {
// ¯\_(ツ)_/¯
}
}
Прокрутите вниз, чтобы считать, что это правильный способ сделать это. https://github.com/Microsoft/TypeScript-Handbook/blob/master/pages/Namespaces%20and%20Modules.md