TypeScript включает файлы, которые он не должен включать? - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть tsconfig как это:

{
  "compilerOptions": {
    "module": "esnext",
    "target": "es6",
    "declaration": true,
    "outDir": "./dist",
  },
  "include": [
    "src/**/*"
  ]
}

и скажем очень простой исходный файл:

// ./src/index.ts
function hello() {
  return 'hello';
}

, тогда как-то, я получаю сообщение об ошибке:

node_modules/typescript/lib/lib.es2015.iterable.d.ts:41:6 - error TS2300: Duplicate identifier 'IteratorResult'.

41 type IteratorResult<T, TReturn = any> = IteratorYieldResult<T> | IteratorReturnResult<TReturn>;
        ~~~~~~~~~~~~~~

  ../../../node_modules/@types/node/index.d.ts:166:11
    166 interface IteratorResult<T> { }
                  ~~~~~~~~~~~~~~
    'IteratorResult' was also declared here.

Теперь я знаю о другом сообщении StackOverflow с тем же сообщением об ошибке, но на самом деле это не та же ошибка. Почему он проверяет ../../../node_modules/@types/node/index.d.ts:166:11? Я включаю только src?

У меня нет той же проблемы, когда я использую "module": "commonjs".

1 Ответ

0 голосов
/ 28 апреля 2020

Проблема в том, что для typings применяется правило, отличное от "include". Вам необходимо добавить свойство typeRoots в параметры компилятора tsconfig:

{
  "compilerOptions": {
    "module": "esnext",
    "target": "es6",
    "declaration": true,
    "outDir": "./dist",
    "typeRoots": ["./node_modules/@types/"]
  },
  "include": [
    "src/**/*"
  ]
}

В противном случае оно перемещается вверх для поиска типов, как указано здесь: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html#types -typeroots-and-types

По умолчанию все видимые пакеты «@types» включены в ваш сборник. Пакеты в типах node_modules / @ любой вложенной папки считаются видимыми; в частности, это означает, что пакеты находятся внутри ./node_modules/@types/, ../node_modules/@types/, ../../node_modules/@types/ и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...