Bug报告
🔎 搜索词
declaration emit
dts
inline
inlining
duplication
🕗 版本与回归信息
- 在所有我尝试的版本中,都存在这种行为。
⏯ Playground链接
包含相关代码的Playground链接
💻 代码
export const I = {
/**
* Docs
*/
prop: true
};
export const Inlined = I;
export const Aliased: typeof I = I;
🙁 实际行为
声明emit包含重复的类型。
export declare const I: {
/**
* Docs
*/
prop: boolean;
};
export declare const Inlined: {
/**
* Docs
*/
prop: boolean;
};
export declare const Aliased: typeof I;
🙂 预期行为
声明emit应该通过别名引用原始类型。
export declare const I: {
/**
* Docs
*/
prop: boolean;
};
export declare const Inlined: typeof I;
export declare const Aliased: typeof I;
注意事项
我知道这是按预期工作的,所以如果没有快速解决的办法,请立即关闭。
我们有很多文档因为这个特定的简单文件内部变体而变得冗长,这是更一般化的重复/内联问题的一个特定示例。当进行类型重命名或迁移时,它们需要以不同的名称导出,这时就会发生这种情况。解决方法是显式添加 typeof X
注解,但人们常常忘记这一点。
长期的解决方案是采用 --isolatedDeclarations
并使用完全不同的声明emit形式,但在短期内,对于喜欢推断的人来说,也许还有一种快速修复现有声明emit的方法?
2条答案
按热度按时间iklwldmw1#
我原则上对此没有任何担忧:如果初始化器是一个导出的裸标识符,那么似乎完全可以安全地重用它的
typeof
代替匿名类型。然而,这种情况(在这种情况下是安全的)发生得有多频繁呢?我有点惊讶。
f45qwnt82#
我注意到这个案例的另一个问题:
如果变量I上有jsdoc注解,内联版本在复制内容时会丢失它们,而别名版本不会。