如何为本地lib/day模块复用yarn包dayjs的类型定义?
解决方法
方法一:自定义类型声明文件
这是最直接可靠的方式,让TypeScript把lib/day的模块类型和dayjs关联起来:
- 在项目根目录新建
types文件夹(如果没有的话),里面创建lib.d.ts文件 - 在
lib.d.ts里写入以下代码:
declare module 'lib/day' { export * from 'dayjs'; }
- 打开
tsconfig.json,确保compilerOptions里的typeRoots包含你新建的types文件夹:
{ "compilerOptions": { "typeRoots": ["./node_modules/@types", "./types"] } }
配置完成后,你用import * as day from "lib/day"时,TypeScript会自动套用dayjs的类型定义,同时编译后的代码依然指向本地的lib/day路径,完全满足SuiteScript的运行要求。
方法二:利用tsconfig的paths别名
如果你的项目已经在使用TypeScript路径别名,可以尝试这种方式:
- 在
tsconfig.json的compilerOptions中添加paths配置,把lib/day映射到dayjs的类型文件:
{ "compilerOptions": { "paths": { "lib/day": ["./node_modules/dayjs"] } } }
注意:这种方式需要确保你的SuiteScript构建工具不会把dayjs模块打包进去,而是保留实际导入路径为lib/day。如果构建工具会解析TS的paths别名,可能需要额外配置忽略该映射,只让TypeScript用于类型检查。
你之前尝试的<reference path="..." />之所以无效,是因为它主要用于全局类型或单个文件的类型引用,无法直接关联模块级别的类型映射,上面两种方法更适配你的场景。
内容的提问来源于stack exchange,提问作者EliBaum
相关产品推荐
相关产品推荐

