如何在tsconfig中扩展类型同时保留默认行为?
如何扩展TypeScript默认类型引入行为,添加自定义类型而非覆盖?
根据TypeScript官方文档,在types配置项中设置值会覆盖默认行为,仅引入指定的类型:
默认情况下,所有可见的”@types“包都会被纳入编译。任何上级目录node_modules/@types下的包都视为可见,例如./node_modules/@types/、../node_modules/@types/等。
若指定了types,则仅列出的包会被纳入全局作用域。示例如下:"compilerOptions": { "types": ["node", "jest", "express"] }该tsconfig.json仅会引入./node_modules/@types/node、./node_modules/@types/jest和./node_modules/@types/express,node_modules/@types/下的其他包不会被引入。
有没有办法不覆盖默认行为,而是在默认引入所有@types包的基础上,额外添加一个不在@types中的自定义类型?
解决方案
要实现这个需求,无需使用types配置项,可通过以下两种方式达成:
1. 配置typeRoots扩展类型扫描目录
如果你的自定义类型存放在独立目录(比如./src/types),可以通过typeRoots同时指定默认的@types目录和自定义类型目录:
"compilerOptions": { "typeRoots": ["./node_modules/@types", "./src/types"] }
这样TypeScript会自动扫描这两个目录下的所有类型包,既保留默认的@types包引入,又会加载自定义目录中的类型。
2. 显式引入或包含自定义类型文件
如果自定义类型是单个声明文件(比如./src/custom-types.d.ts):
- 若为局部类型,可在需要使用的文件中通过类型导入引入:
import type * as CustomTypes from './src/custom-types'; - 若为全局类型,只需在
tsconfig.json的include配置中确保该文件被包含:"include": ["src/**/*", "./src/custom-types.d.ts"]
这种方式下,TypeScript会自动识别该文件中的全局类型,同时保留默认的@types包引入逻辑。
内容的提问来源于stack exchange,提问作者Eliya Cohen
相关产品推荐
相关产品推荐

