搜索词
export default type
建议
允许 export default
用于 type
。
用例
如果能将 export default type
与其他默认导出(如类和接口)匹配,那将会非常方便。
目前,将任何内容作为默认导出并仅允许具有命名导出的类型看起来非常不一致:
export default class MyClass {}
export default interface MyInterface {}
export type MyType = {}
现在实现这一点的唯一方法是使用令人讨厌的解决方法:
type X = number | string
export { X as default }
这可能会让新手感到困惑,因为没有明确的原因说明为什么类和接口可以作为默认导出,而不能是类型。
示例
// x.ts
export default type X = {}
// main.ts
import X from './x'
检查清单
我的建议满足以下准则:
- 这不会对现有的 TypeScript/JavaScript 代码造成破坏性更改
- 这不会改变现有 JavaScript 代码的运行时行为
- 这可以在不根据表达式的类型发出不同的 JS 的情况下实现
- 这不是一个运行时特性(例如库功能、带有 JavaScript 输出的非 ECMAScript 语法等)
- 这个特性将与 TypeScript's Design Goals 的其他部分保持一致。
- (不确定最后一个)*
5条答案
按热度按时间qlvxas9a1#
我经常想要导出既是类型又是值的属性。例如:
对我来说,这应该也可以用默认导出实现。
im9ewurl2#
Any updates on this?
tyky79it3#
TypeScript 5.0(在 #52203 中引入了一个名为
--verbatimModuleSyntax
的新选项,使得以下代码产生以下错误:An 'export default' must reference a value when 'verbatimModuleSyntax' is enabled, but 'X' only refers to a type.
,因为默认导出X
没有明确标记为类型:解决方法是在
export
声明中使用命名导出将X
标记为类型:但这看起来相当间接。拥有
export default type X;
也有助于使这变得更加直接。hgc7kmma4#
看起来像是个bug,因为我在一个文件里只有1种类型。
tkclm6bt5#
对于那些正在寻找"
export default
的类型注解"的人,请跟随#13626。