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 相关包可以看看这个:
