如何为typescript-library-starter模板添加自定义类型定义?
解决typescript-library-starter中自定义类型未被编译到dist的问题
以下是几种可行的解决方法,按推荐优先级排序:
方法1:将自定义类型放到src目录内并直接导出
这是最符合模板默认配置的方式,无需额外修改编译配置:
- 在src目录下新建
types/index.ts文件,声明并导出你的自定义类型:export interface Dog { name: string; breed: string; } - 在库的入口文件(比如
src/index.ts)中重新导出该类型:// 导出你的库功能 export const sayHello = (name: string) => `Hello ${name}!`; // 导出自定义类型 export { Dog } from './types'; - 执行编译后,
Dog类型会自动被包含到dist/index.d.ts中,消费者可以直接通过import { Dog } from 'hwrld'使用。
方法2:调整tsconfig.json包含typings目录
如果坚持要把类型文件放在src外的typings目录,需要修改编译配置让tsc处理这些文件:
- 修改
tsconfig.json的include字段,添加typings/**/*:{ "include": [ "src/**/*", "typings/**/*" ] } - 在
typings/index.d.ts中确保类型是模块级导出:export interface Dog { name: string; breed: string; } - 在src入口文件中导出该类型:
export { Dog } from '../typings';
这样编译时tsc会将typings里的类型合并到dist的类型文件中。
方法3:检查package.json的types字段配置
确保你的package.json中正确指定了类型文件的入口:
{ "types": "dist/index.d.ts" }
这个字段告诉TypeScript消费者你的库的类型定义文件位置,必须指向编译后生成的正确路径。
为什么之前的方法无效?
- 你放在src外的typings目录默认不在tsc的编译范围内,所以不会被处理;
- 即使typings目录被编译,若没有在库的入口文件中导出该类型,它也不会被合并到最终的
dist/index.d.ts里,消费者自然无法识别。
内容的提问来源于stack exchange,提问作者chick3n0x07CC
相关产品推荐
相关产品推荐

