找不到自定义定义打字稿v3

时间:2019-07-01 03:14:20

标签: javascript typescript typescript-typings tsconfig

当我运行Webpack开发服务器时,Typescript给我这个错误

Flowable.just(1)
 .map { it.toString() }
 .map { Result.success(it) }
 .onErrorReturn { Result.failure(it) }

这是tsconfig

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

我在根目录中有一个名为“ typings”的目录,层次结构为“ typings / my-scheduler / index.d.ts”

index.d.ts

{
  "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"]
}

在点击vs代码导入时,我可以找到这种输入方式

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

但是当我运行Web Pack服务器时,它正在提供

import { TimeSpan } from 'my-scheduler';

这是什么原因?

1 个答案:

答案 0 :(得分:1)

您混用了两个相互冲突的模块解析机制,即外部外部模块声明和基于--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 {}