TypeScript - Невозможно импортировать себя в переопределение типов в корне других типов, TS7016 - PullRequest
0 голосов
/ 23 сентября 2018

Я работаю с FeathersJS и TypeScript.Поскольку он все еще находится в стадии разработки (TS for Feathers), я обнаружил, что мне нужно переопределить типы, чтобы это можно было адаптировать к моему случаю (например, нумерацию страниц можно отключить или включить, и типы должны обрабатывать это, но в данный момент этого не делают).

В моем tsconfig.json у меня есть следующее:

"typeRoots": [                            /* List of folders to include type definitions from. */
      "./types",
      "node_modules/@types"
    ],

Порядок не имеет значения, так как я пытался сначала с node_modules.

Я положил папкуfeathersjs__feathers in ./types только с index.d.ts (удалено package.json) с точной копией типов из DefinitiveTyped.

Эта строка вызывает проблему: import * as self from '@feathersjs/feathers';

TS7016 не удалось найти файл объявления для модуля '@ feathersjs / feathers'.'C: / Users / marek / dev / system / api - kopia/node_modules/@feathersjs/feathers/lib/index.js' неявно имеет тип 'any'.Попробуйте npm install @types/feathersjs__feathers, если он существует, или добавьте новый файл декларации (.d.ts), содержащий declare module 'feathersjs__feathers';

Я попытался добавить package.json в мою папку, например:

{
  "name": "@types/feathersjs__feathers",
  "version": "0.0.1",
  "types": "index.d.ts"
}

но это не поможет с этим вопросом.Если я установлю @types/feathersjs__feathers, так что это будет в node_modules, то ошибки не будет, но независимо от того, в каком порядке в typeRoots он принимает типы из этих типов, а не из моего переопределения.

Любые решения для этого?

Обычно конфигурация с ./types и папки с index.d.ts хороши, как, например, для feathers-mongoose У меня есть свои собственные наборы, и они работают правильно.Проблема только в том, чтобы импортировать себя ...

1 Ответ

0 голосов
/ 24 сентября 2018

typeRoots только помогает компилятору TypeScript находить файлы для загрузки для опции types (или директивы /// <reference types="..."/>) в интересах любых declare module "..." { ... } и глобальных объявлений, которые они содержат.Но файл index.d.ts для @feathersjs/feathers не использует declare module "..." { ... };он предназначен для поиска самого модуля в процессе разрешения основного модуля TypeScript.Этот процесс не учитывает typeRoots и запрограммирован для поиска в node_modules/@types, когда он находит нетипизированный модуль в node_modules.Чтобы разрешение модуля выглядело как дополнительное место, вы должны использовать опции baseUrl и paths:

{
    "compilerOptions": {
        // ...
        "baseUrl": ".",
        "paths": {
            "@feathersjs/feathers": ["types/feathersjs__feathers"]
        }
    }
}

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

(я заметил, что виджет "Связанные" переполнения стека обнаружил ответ , который в основном отвечает на ваш вопрос, хотя ИМО не так ясен, как мой ответ.)

...