Машинописный текст не может найти файл декларации

#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