Не могу найти пользовательское определение машинопись v3 - PullRequest
0 голосов
/ 01 июля 2019

Typescript выдает мне эту ошибку при запуске моего сервера webpack dev

ERROR in ./src/components/allowcated-resources/AllowcatedResources.tsx
Module not found: Error: Can't resolve 'my-scheduler' in 'mypath\allowcated-resources'
 @ ./src/components/allowcated-resources/AllowcatedResources.tsx 3:0-41 77:20-28
 @ ./src/components/App.tsx
 @ ./src/index.tsx
 @ multi ./src/index.tsx

вот это tsconfig

{
  "compilerOptions": {
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noImplicitReturns": true,
    "noFallthroughCasesInSwitch": true,
    "allowSyntheticDefaultImports": true,
    "allowUnusedLabels": false,
    "allowUnreachableCode": false,
    "jsx": "react",
    "module": "ESNext",
    "moduleResolution": "node",
    "noImplicitAny": false,
    "target": "es5",
    "sourceMap": true,
    "lib": ["es6", "dom"],
    "typeRoots": ["./node_modules/@types", "./typings"],
    "baseUrl": ".",
    "paths": {
      "my-scheduler": ["typings/my-scheduler"]
    },
    "plugins": [
      {
        "name": "typescript-tslint-plugin",
        "alwaysShowRuleFailuresAsWarnings": false,
        "ignoreDefinitionFiles": true,
        "configFile": "./tslint.json",
        "suppressWhileTypeErrorsPresent": false
      }
    ]
  },
  "include": ["./src/**/**/*"],
  "exclude": ["node_modules", "typings"]
}

У меня есть каталог с именем 'typings' в корне, и иерархия выглядит как 'typings / my-scheduler / index.d.ts'

index.d.ts

declare module 'my-scheduler' {
  // export members
  export class TimeSpan { // }
}

Я могу найти эту печатную форму, щелкнув vs code import

import { TimeSpan } from 'my-scheduler';

но когда я запускаю сервер веб-пакетов, он дает это

Module not found: Error: Can't resolve 'my-scheduler'

В чем причина этого?

1 Ответ

1 голос
/ 01 июля 2019

Вы смешиваете два механизма разрешения конфликтующих модулей, объявления внешних модулей и стандартное разрешение модулей на основе таких механизмов разрешения, как --paths и --moduleResolution.

Объявления внешних модулей, которые могут быть вредными, посколькуони загрязняют глобальное пространство имен объявлений модулей в виде

// it doesn't matter where this file is or what it's called, as long as TypeScript includes it

declare module 'my-scheduler' {
  export class TimeSpan {}
}

Такие объявления не разрешаются на основе расположения содержащего их файла или любых других условий разрешения модуля.Они становятся доступными для импорта всякий раз, когда файл, содержащий объявление, включается в контекст компиляции TypeScript.

Другой, предпочтительной формой является использование разрешения модуля, например, пути разрешаются так же, как и любой другой модуль, и не загрязняютглобальное пространство имен объявлений модулей и имеет форму

export declare class TimeSpan {}

Поэтому, поскольку вы используете пути, вы хотите использовать последнюю форму, которая является просто обычным модулем

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