vscode не может найти определения типа typeRoots - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь иметь только один файл, чтобы большинство определений типов, которые будут использоваться во всем приложении, я создал папку с именем @types и файл index.d.ts, экспортирующий каждый интерфейс / введите, я хочу.

Обновлен мой tsconfig.json для включения этой папки:

{
    "compilerOptions": {
        "outDir": "./built",
        "allowJs": true,
        "target": "es5",
        "jsx": "react",
        "allowSyntheticDefaultImports": true,
        "lib": [
            "es2015"
        ],
        "typeRoots": [
            "./@types"
        ],
    },
    "include": [
        "./client/**/*",
        "./@types/**/*"
    ],
    "awesomeTypescriptLoaderOptions": {
        "silent": true,
        "errorsAsWarnings": true
    }
}

Даже если в коде (внутри клиента / ...) я ссылаюсь на один из интерфейсов, присутствующих в index.d.ts, vscode выдает «Не удалось найти имя».

Есть ли лучший способ это исправить?

Определение интерфейса присутствует внутри @ types / index.d.ts.

export interface Agent {
    name: string;
...
}

Использование:

interface Props extends RouteComponentProps<any> {
    agent?: types.Agent;
}

1 Ответ

0 голосов
/ 30 августа 2018

Поскольку вы используете ключевое слово export, @types/index.d.ts рассматривается как модуль, и единственный способ получить доступ к типам из него - это импортировать их. Например, после выполнения следующих действий вы можете обратиться к types.Agent:

import * as types from "../path/to/@types/index";

Вы можете удалить все вхождения export, чтобы @types/index.d.ts обрабатывался как файл глобальной декларации, и вы могли ссылаться на типы просто как Agent. Или вы можете поместить типы в пространство имен с именем types и затем обратиться к types.Agent.

Параметр компилятора typeRoots не связан. Он сообщает компилятору, где найти пакеты с объявлениями, которые должны быть загружены, но ваша проблема не в том, чтобы загружать объявления (поскольку @types/index.d.ts соответствует вашему include), а в том, чтобы импортировать их.

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