TS 编译器问题记录
无法写入文件,因为他会覆盖输入文件
tsconfig.json 报 “无法写入文件,因为他会覆盖输入文件”
原因:
因为没有指定,所以/lib
被认为是源文件的一部分
使用了"outDir": "./lib"
,导致编译后的文件和源文件在同一目录下,导致覆盖,所以报错
解决:
json
// tsconfig.json
{
"exclude": [
"node_modules", // 通常都要排除
"lib" // 排除编译后的文件
]
}
解决方案来自这篇文章
理解@types
TS 编译配置增加"declaration": true
,这样编译后会生成.d.ts
文件,这个文件是用来描述类型的。
这样别的 TS 代码引用这个包的时候会自动识别到这个包的.d.ts
文件,从而知道这个包的类型,不需要再安装@types/xxx
了。
这样的包可以直接发布到 npm 上,别人安装的时候就不需要再安装@types/xxx
了。
json
// tsconfig.json
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"declaration": true,
"outDir": "dist",
"strict": true
}
}
注意最好在 package.json 中增加types
字段,指向编译后的.d.ts
文件
json
// package.json
{
"name": "xxx",
"version": "1.0.0",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"scripts": {
"build": "tsc"
},
"devDependencies": {
"typescript": "^3.7.2"
}
}
发布 TS 相关包可以看看这个: