.d.ts声明文件能否为导出内容添加as const断言?
完全可以在 .d.ts 声明文件中实现和 as const 完全等价的效果,常用的实现方案有两种:
方案1:手动声明等价的只读字面量类型
as const 本质上做了两件事:将对象所有层级的属性标记为只读、把所有属性值的类型收窄到对应的字面量类型。你可以直接在声明文件中手动标注符合这个规则的类型即可。
假设你的JS文件名为stuff.js,对应的stuff.d.ts写法如下:
export declare const stuff: { readonly a: { readonly b: "xyz"; }; };
方案2:借助临时变量直接使用as const断言
如果对象结构复杂,手动编写全量属性的只读和字面量类型效率太低,你可以在声明文件内部先定义一个临时常量,直接加as const断言后再导出对应类型即可,最终效果和TS文件中直接写as const完全一致:
declare const _temp_stuff: { a: { b: "xyz" } } as const; export declare const stuff: typeof _temp_stuff;
两种方案处理后,TS都可以正确识别stuff.a.b的类型为固定字面量"xyz",支持条件类型、类型查找等所有as const的适用场景。
内容的提问来源于stack exchange,提问作者svidgen
相关产品推荐
相关产品推荐

