当我运行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';
这是什么原因?
答案 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 {}