我在使用TypeScript项目遇到两个问题。
假设我想创建一个名为JsonConfig
的仅接口 TypeScript项目。我打算在名为myproject-api
和myproject-impl1
的两个不同项目中实现接口。我正在使用Lerna将这些项目作为名为myroject-impl2
的根项目中的模块进行管理,并根据需要将所有项目bootstrapped(myproject
)。我也使用npm link
来转换TypeScript源代码,截至目前,配置非常简单。
问题1。即使gulp
中有"types": "dist/main.d.ts"
或"types": "src/index.ts"
,实施模块也无法在package.json
中看到类型定义。我还尝试将myproject-api
移至myproject-api/src/index.ts
,但无济于事。编译器失败并显示消息 myproject-api/index.ts
问题2。如果Cannot find module 'myproject-api'.
源文件中没有实际实现,那么TypeScript似乎不会生成.d.ts
文件,除非我使用.ts
编译项目。换句话说,出于某种原因,如果我使用tsc -d --outFile dist/main.js
配置(例如tsconfig.json
),则会生成tsc --project tsconfig.json
个文件,但不生成.js
个文件。
P.S。:我开始这个项目只是为了充实并改进我想到的一些想法。如果有人对这种项目布局有更好的设置,请告诉我。
我在所有.d.ts
项目中使用ES6导入。
这是我的文件夹布局:
.ts
.
├── lerna.json
├── package.json
├── packages
│ ├── myproject-api
│ | ├── dist
│ │ ├── gulpfile.js
│ │ ├── package.json
│ │ ├── src
│ │ │ └── index.ts
│ │ └── tsconfig.json
│ └── myproject-impl*
│ ├── dist
│ ├── gulpfile.js
│ ├── package.json
│ ├── src
│ │ └── index.ts
│ └── tsconfig.json
└── README.md
:
packages/myproject-api/src/someClass.ts
export interface ISomeClass { /* ... */ }
:
packages/myproject-api/src/index.ts
export * from "./someClass.ts"
// (repeating this kind of export for all inner modules)
:
packages/myproject-impl*/src/index.ts
Gulp config:
import { ISomeClass } from "myproject-api"
// ...
这是所有项目的var gulp = require("gulp");
var ts = require("gulp-typescript");
var tsProject = ts.createProject("tsconfig.json");
gulp.task("default", ["build"]);
gulp.task("build", function () {
return tsProject.src()
.pipe(tsProject())
.js.pipe(gulp.dest("."));
});
:
tsconfig.json
系统信息:
{
"compilerOptions": {
"target": "es6",
"module": "amd",
"strict": true,
"baseUrl": ".",
"outFile": "dist/main.js",
"declaration": true,
"lib": [
"es5",
"es2015.promise",
"es2015.iterable"
]
},
"exclude": [
"node_modules",
"dist"
]
}
答案 0 :(得分:0)
正如@OJKwon所说,--traceResolution
帮助我弄明白了。根据{{3}},如果您在tsc
中指定package.json
,则"moduleResolution": "node"
仅查看tsconfig.json
,默认情况下为"moduleResolution": "classic"
。使用index.ts
作为默认导入模式也仅用于node
解析。
我还必须重新启动VSCode才能正确解析导入。