Skip to content

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

Copyright © 2022 田园幻想乡 浙ICP备2021038778号-1