Javascript 如何使用Typescript索引注释性对象
所以,这个标题相当准确地概括了它。我正在做的是将一系列函数导入名为“ops.ts”的索引文件中,ops.ts使用“Javascript 如何使用Typescript索引注释性对象,javascript,typescript,Javascript,Typescript,所以,这个标题相当准确地概括了它。我正在做的是将一系列函数导入名为“ops.ts”的索引文件中,ops.ts使用“export”语法导出这些函数(下面的代码片段)。然后我从另一个文件导入ops.ts,并动态调用这些函数。一个小问题是,我无法使用字符串键从ops.ts索引对象(我对Typescript不太熟悉,所以我不确定到底出了什么问题)。具体地说,我得到的错误元素隐式地具有“any”类型,因为类型为“string”的表达式不能用于索引类型。任何帮助都将不胜感激 以下是相关代码: ops.ts
export
”语法导出这些函数(下面的代码片段)。然后我从另一个文件导入ops.ts
,并动态调用这些函数。一个小问题是,我无法使用字符串键从ops.ts
索引对象(我对Typescript不太熟悉,所以我不确定到底出了什么问题)。具体地说,我得到的错误元素隐式地具有“any”类型,因为类型为“string”的表达式不能用于索引类型。任何帮助都将不胜感激
以下是相关代码:
ops.ts
export { default as add } from "./ops/add.ts";
export { default as mult} from "./ops/mult.ts";
这里面有很多东西
根据编译模块的方式,结果JS对象中可以有其他字段。Typescript将不允许您为它们编制索引,但Object.keys()
和其他迭代键的方法将允许。您可能不希望在操作
数组中有“\uu esModule”:true
字段。(检查沙盒中的控制台输出:)
Object.keys()
的类型是通用的。它可以返回ops类型的键数组
,但为简单起见,它只是字符串
。通常不能使用任意字符串为特定类型的对象编制索引。您必须显式地强制转换它,比如operations[key]=ops[key-as-keyof-typeof-ops]
至于如何处理这个问题,我建议将操作作为关联数组导入,这样实际上就不必遍历模块的键。像这样:
//ops.ts
import { default as add } from "./add";
import { default as mult } from "./mult";
export const allOperations = { add, mult }
作为一个固执己见的补充,我建议避免TypeScript中的默认导出:为什么不简单地这样做。operators=ops?因为当我试图学习新东西时,我作为一名编码员的能力似乎消失了。谢谢你的简单修复,看起来我有点过于复杂了。好的,谢谢你的建议!打字脚本似乎有很多诀窍。
main.ts
import * as ops from "./ops.ts"
class example {
//irrelavent code
constructor() {
Object.keys(ops).forEach((op: string) => {
this.operators[op] = ops[op];
});
}
}
//ops.ts
import { default as add } from "./add";
import { default as mult } from "./mult";
export const allOperations = { add, mult }