typescript - 导出的枚举/常量在同一文件中未定义
问题描述
过时的原始问题:
我对打字稿有很大的问题。我有一个包含导出常量、枚举和函数的文件(不是类)。
一些函数正在使用它自己的文件中定义的 const 和枚举。调试时我发现那些是未定义的,这会阻止函数正常工作。
当我从“外部”访问枚举和常量时,它们按预期工作。
这是一个例子:
export enum UltimateMeasures {
ULTIMATE_CARE_1 = 1500,
ULTIMATE_CARE_2,
}
export const UltimateMeasuresLabels: Map<UltimateMeasures, string> = new Map([
[UltimateMeasures.ULTIMATE_CARE_1, "Ultima foo"],
[UltimateMeasures.ULTIMATE_CARE_2, "Ultima bar"],
]);
export function ultimateMeasuresLabelProvider(key: any): string {
if (Array.isArray(key)) {
const labels = [];
for (const k of key) {
labels.push(UltimateMeasuresLabels.get(k));
}
return labels.join(", ");
}
return UltimateMeasuresLabels.get(key);
}
console.log(ultimateMeasuresLabelProvider(UltimateMeasures.ULTIMATE_CARE_1));
当我从不同的模块使用 UltimateMeasures 时,它们会被初始化,当我调用ultimateMeasuresLabelProvider 时,它们在函数中是未定义的,那么在不使用类和初始化程序的情况下如何将它们定义到范围?
修复了调用 get 中的错误
更新:
抱歉,该错误仅由调试器呈现,它不了解底层实现。值得强调的是,如果我要创建一个内部 const awareOfUltimateMeasuresLabels 并将其指向导出的 UltimateMeasuresLabels,那么调试器也将按预期工作。
感谢您的回答,我把它留在这里,以防其他人遇到同样的情况以提供希望,最后,它可以工作:)
export function ultimateMeasuresLabelProvider(key: any): string {
const awareOfUltimateMeasuresLabels = UltimateMeasuresLabels;
if (Array.isArray(key)) {
const labels = [];
for (const k of key) {
labels.push(awareOfUltimateMeasuresLabels.get(k));
}
return labels.join(", ");
}
return awareOfUltimateMeasuresLabels.get(key);
}
解决方案
您的ultimateMeasuresLabelProvider
功能不正确,实际上启用严格模式后它甚至无法编译。我不确定您到底想实现什么,但我最好的猜测是您希望通过提供一个值或一组值来获得一个或多个标签,并在UltimateMeasuresLabels
Map 对象中设置逗号。所以我不太明白这是怎么回事:如果你这样称呼它:.UltimateMeasures
UltimateMeasures
UltimateMeasuresLabels.get(UltimateMeasures[String(k)])
ultimateMeasuresLabelProvider(UltimateMeasures.ULTIMATE_CARE_1)
无论哪种方式,此功能很可能会解决您的问题:
function ultimateMeasuresLabelProvider(key: UltimateMeasures | UltimateMeasures[]): string {
if (Array.isArray(key)) {
const labels: string[] = [];
for (const k of key) {
const label = UltimateMeasuresLabels.get(k);
if (label) labels.push(label);
}
return labels.join(", ");
}
return UltimateMeasuresLabels.get(key) || '';
}
请注意,您不必将密钥转换为字符串或类似的任何东西。
推荐阅读
- python - 如何重命名子目录中的图像?
- java - 服务 onCreate 和 onStartCommand 不运行
- c# - 尝试加密密钥时输入数据不是完整的块
- artifactory - 尝试从 nuget-gallery 访问 nuget 包时出现超时问题
- react-native - react-native run-android 执行失败
- r - 将SPSS中的标签添加为R中的列名
- c# - 从另一个 Combobox 中选择时更改另一个 Combobox Item 列表
- java - 杰克逊:反序列化 XML 在列表中提供了太多元素
- asp.net - 从复选框列表向多个号码发送短信
- javascript - JavaScript 按可空布尔值排序数组,然后是字符串