#reactjs #typescript #types
Вопрос:
Я не уверен, почему, но typescript не может найти мой файл декларации, хотя он у меня есть. Кто-нибудь может понять, почему это так?
Структура моего проекта:
scr
- main.ts
- dec.d.ts
str-utils
- index.js
Импорт:
import {strReverse, strToLower} from '../str-utils/index.js'
Мой файл декларации (dec.d.ts):
declare module "str-utils"
Моя конфигурация машинописного текста:
{
"compilerOptions": {
"module": "commonjs",
"noImplicitAny": true,
"removeComments": true,
"preserveConstEnums": true,
"sourceMap": false,
"outDir": "dist"
},
"include": [
"src/**/*",
"src/dec.d.ts"
],
"exclude": [
"node_modules",
"**/*.spec.ts"
]
}
Кто-нибудь может понять, что я здесь делаю не так?
Ответ №1:
Общее правило для имени declare module "{name}"
заключается в том, что оно должно быть тем же именем, которое вы использовали бы для импорта модуля. Итак, в данном случае, declare module '../str-utils/index.js'
. Но это не сработает, потому declare module "{name}"
что не работает для относительных путей. У вас есть два варианта решения этой проблемы:
1. Сделать импорт не относительным:
Вы изменяете tsconfig, чтобы сделать str-utils
его доступным без относительного импорта.
{
"compilerOptions": {
// other options
"paths": {
"string-utils": ["./str-utils/index.js"]
},
},
// other options
}
Теперь вы можете импортировать str-utils
через import {strReverse, strToLower} from 'str-utils'
и, таким образом, ваше объявление модуля работает.
2. Перемещение файла декларации в str-utils
папку
Во-первых, вам нужно удалить declare module "str-utils"
из вашего файла декларации. Это должно выглядеть примерно так:
// no wrapping declare module "name" anymore
export function strReverse(arg: string): string;
export function strToLower(arg: string): string;
Затем вам нужно переименовать имя файла декларации, чтобы оно соответствовало имени файла модуля, который вы хотите дополнить. В этом примере мы хотим увеличить index.js
, поэтому имя файла объявления типа должно быть index.d.ts
. Ваша структура папок должна выглядеть так для этого подхода:
src
- main.ts
str-utils
- index.d.ts
- index.js