Я пытаюсь скомпилировать через tsc, который я установил глобально, и получаю сообщение об ошибке:

~ / AppData / Roaming / nvm / v11.15.0 / node_modules / typescript / lib / lib.es2015.iterable.d.ts: 41: 6 - ошибка TS2300: повторяющийся идентификатор «IteratorResult».

41 тип IteratorResult  = IteratorYieldResult  | IteratorReturnResult ;
        ~~~~~~~~~~~~~~

  node_modules/@types/node/index.d.ts: 170: 11
    170 интерфейс IteratorResult  {}
                  ~~~~~~~~~~~~~~
    Здесь также был объявлен IteratorResult.

node_modules/@types/node/index.d.ts: 170: 11 - ошибка TS2300: повторяющийся идентификатор IteratorResult.

170 интерфейс IteratorResult  {}
              ~~~~~~~~~~~~~~

~ / AppData / Roaming / nvm / v11.15.0 / node_modules / typescript / lib / lib.es2015.iterable.d.ts: 41: 6
    41 тип IteratorResult  = IteratorYieldResult  | IteratorReturnResult ;
            ~~~~~~~~~~~~~~
    Здесь также был объявлен IteratorResult.


Нашел 2 ошибки.

У меня установлена ​​@ types / node версия 10.1.0. (@ latest имеет свои проблемы ...)

tsconfig.json

{
  "compilerOptions": {
    "target": "es2018",
    "moduleResolution": "узел",
    "модуль": "commonjs",
    "jsx": "реагировать",
    "lib": [
      "дом",
      "es2018",
      "dom.iterable",
      "scripthost"
    ],
    "typeRoots": [
      "./node_modules/@types",
      "./types"
    ],
    "типы": [],

    "alwaysStrict": правда,
    "strictNullChecks": true,
    "noImplicitAny": правда,
    "noImplicitReturns": истина,
    "noImplicitThis": правда,
    "noUnusedLocals": правда,

    "экспериментальныеДекораторы": правда,
    "emitDecoratorMetadata": правда,
    "esModuleInterop": правда,

    "sourceMap": правда,

    "outDir": "dist"
  },
  "файлы": [
    "приложение / index.tsx"
  ],
  "включают": [
    "приложение / ** / *. ts",
    "приложение / ** / *. tsx",
    "test / ** / *. ts",
    "test / ** / *. tsx",
    "node_modules/@types/**/*.d.ts",
    "./types/**/*.d.ts"
  ],
  "исключать": [
    "расст"
  ]
}

Если я удалю машинописный текст глобально и запустил npx tsc, он будет работать, но не должно быть ничего плохого в установке и запуске машинописного текста глобально. В конце концов, в этом весь смысл глобальной установки.

А пока у меня есть обходной путь - просто псевдоним tsc (я использую git bash в Windows).

псевдоним tsc = "путь / к / проекту / node_modules / .bin / tsc.cmd"

dx_over_dt

Ответов: 11

Ответы (11)

Обнаружил проблему на GitHub - https://github.com/microsoft/TypeScript/issues/32333, которая была связана. @rbuckton предложил обновить @ types / node. У меня это сработало.

Я нашел эту ветку после того, как погуглил об ошибке. Моя проблема заключалась в том, что каким-то образом у меня был ненужный импорт, который вызвал это:

import { error } from 'protractor';

Я решил эту проблему вручную, прокомментировав одно из объявлений интерфейса "IteratorResult" в файл node_modules/@types/node/index.d.ts. Надеюсь, это поможет.

Вот как я это решил:

удаление npm --save-dev webpack

npm install --save-dev @ angular-devkit /build-angular@latest

Я получал ошибку is в моем приложении angular 8 и не смог решить проблему, попробовав все предложения, сделанные здесь, включая принятый ответ. Мне пришлось взглянуть на предыдущее приложение angular 6, которое скомпилировалось без ошибок, и я понял, что могу просто пропустить проверку библиотеки, включив

"skipLibCheck": верно

в файл tsconfig.json. Учитывая тот факт, что мое приложение работает без проблем, я решил применить этот подход. Вот полная конфигурация моего файла tsconfig.json

{
    "compileOnSave": ложь,
    "compilerOptions": {
        "baseUrl": "./",
        "outDir": "./dist/out-tsc",
        "sourceMap": правда,
        "декларация": ложь,
        "downlevelIteration": правда,
        "экспериментальныеДекораторы": правда,
        "модуль": "esnext",
        "moduleResolution": "узел",
        "importHelpers": правда,
        "target": "es2015",
        "typeRoots": [
            "node_modules / @ типы"
        ],
        "lib": [
            "es2018",
            "дом"
        ],
        "skipLibCheck": правда
    },
    "angularCompilerOptions": {
        "fullTemplateTypeCheck": правда,
        "strictInjectionParameters": true
    }
}

После этой конфигурации больше не было ошибок. Примечание: Это не означает, что проблема решена, но, по крайней мере, это позволило мне пропустить ошибку, которая вызвала ошибку. Из-за того, что мое приложение работает, как ожидалось, я просто посчитал эту ошибку несущественной на данный момент.

Как сказал @Muhammad bin Yusrat в своем комментарии, запустите npm i @ types /node@latest (npm i @ types / node не работает !!), если вы только что обновили angular до 9. У меня это сработало.

Он также избавился от другой ошибки консоли ionic 5 после запуска ionic serve-> 'отказался загружать изображение'http:localhost: 8100 / favicon.ico ', потому что это нарушает следующую Политику безопасности содержимого. .... '(см. ниже).

ionic 5 error after running ionic serve

Другая ошибка «IteratorResult» была вызвана ошибкой «Типы распространения». См. Typescript: типы разворота могут быть созданы только из типов объектов. По сути, где-то в вашем коде вы использовали такой оператор распространения return {id: doc.payload.id, ... doc.payload.data ()};, и вы должны изменить его на этот return {id: doc.payload.id, ... doc.payload.data () as {}}; т.е. добавить как {}

Я просто удалил типы / узел, запустив

sudo npm remove @types/node

и снова установил, выполнив следующую команду, и это сработало для меня.

sudo npm i @types/node

Добавить "skipLibCheck": true в compilerOptions в tsconfig.json.

Это решило проблему.Отметьте здесь

Для меня оказалось, что у меня есть папка node_modules в проекте родительского каталога, что-то вроде этого:

node_modules
my-project
- node_modules

Поскольку в node_modules была установлена ​​более старая версия @ types / node, возникла проблема. В моем случае решение, однако, заключалось не в обновлении @ types / node, а в удалении этих node_modules, поскольку я изначально не использовал их.

Если вам действительно нужно иметь node_modules в родительском каталоге с разными типами, и именно так вы хотите, чтобы он был, тогда вы можете указать typeRoots конкретно:

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

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

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

Просто обновите @ types / node в devDependencies вашего проекта Angular:

 npm i --save-dev @types/node

*** Ничего не менять в node_modules ***

Я подозреваю, что это из-за вашего раздела include:

"include": [
    "app/**/*.ts",
    "app/**/*.tsx",
    "test/**/*.ts",
    "test/**/*.tsx",
    "node_modules/@types/**/*.d.ts",
    "./types/**/*.d.ts"
  ]

Обычно вам не нужно явно включать файлы * .d.ts. И, вероятно, никогда не объявлять файлы из других библиотек (или типов узлов).

tsconfigs "exclude" раздел исключает все, что находится под "node_modules" по умолчанию (среди прочего). Когда вы добавляете "node_modules / @ types / ** / *. D.ts", вы переопределяете это exclude, и tsc пытается включить их, но эти типы уже объявлены.

Проверьте документы Typescript на tsconfig.json, это объясняет "typeRoots", "files" и "include"/"исключить" параметры конфигурации подробно.

2022 WebDevInsider