假设我有一个实现文件module.ts
和一个类型声明文件module.d.ts
。
// module.ts
import type ConfigI from 'module.d.ts';
export enum ConfigType {
Simple,
Complex
}
function performTask(config: ConfigI) {
if (config.type === ConfigType.Simple)
// ...
}
// module.d.ts
import ConfigType from 'module.ts';
export interface ConfigI {
type: ConfigType;
}
Typescript不允许在声明文件中使用枚举,因为它们包含运行时值。我该如何重新构建它来摆脱循环依赖呢?
一个可能的解决方案是像这样声明ConfigType:
// module.d.ts
export type ConfigType =
0 | // Simple
1; // Complex
// ...
但是,这会使它变得有点困难,这取决于您希望枚举的类型是数字还是字符串。config.type === ConfigType.Simple
肯定比config.type === 0
更可读;您可以将ConfigType
设置为字符串类型,这样可读性更好,但它会丢失数值。
1条答案
按热度按时间6ss1mwsb1#
您的
ConfigType
不是一个循环结构,因此一个简单的解决方案是将其放置在自己的模块中。当然,这需要消费者的另一种进口。但更好的选择是不要使用枚举。没有一个标准的Javascript概念,现在的Typescript试图严格遵守ES规范。
另一个想法是使用Typescript typesystem来确保获得正确的值。可以使用
keyof
获取字符串名称,然后可以使用数组访问器格式Type[name]
获取值Playground