如果以编程方式创建导出:
示例:
const peeps = ['peep1', 'peep2', ...]
peeps.forEach(peep => exports[peep] = mainMethod.bind(null, peep))
告诉TypeScript这些方法的最佳方法是什么?目前,当我尝试按预期导入它们时,它们不会显示为导出。如何将它们定义为TypeScript理解的导出?
我正在尝试避免:
export const peep1 = mainMethod.bind(null, 'peep1')
export const peep2 = mainMethod.bind(null, 'peep2')
修改 我可能需要说清楚。它工作正常,我没有导出本身的问题,我有一个问题,因为它们是实用的创建,vscode不知道它们存在,因为所述导出在设计时不在文件中。我试图让TypeScript在设计时识别出口。
答案 0 :(得分:0)
问题的第一部分是构造一个具有在字符串数组中定义的属性的对象。
// The helper insures we get the type of peeps as ('peep1' | 'peep2')[] not string[]
const peeps = helper('peep1', 'peep2');
// Define a type that maps the constants to properties
let methods : {
[P in typeof peeps[number]]: () => void
} = {} as any;
// Add the members to the object
peeps.forEach(peep => methods[peep] = mainMethod.bind(null, peep))
function helper<T extends string>(...array: T[]) : T[]{
return array;
}
根据您的模块系统,您可以通过以下两种方式之一导出methods
对象。
如果您使用amd
,commonjs
或umd
,则可以使用导出分配:
// methods.ts
// code above
export = methods;
//usage.ts
import * as m from './aaa'
m.peep1();
对于其他模块系统,您可以使用默认导出:
// methods.ts
// code above
export default methods;
//usage.ts
import m from './aaa'
m.peep1();
答案 1 :(得分:0)
我明白了。我想我只需添加:
declare export function peep1(age:number):any;
declare export function peep2(age:number):any;
基本上,我必须为它写一个d.ts文件,因为它们是动态创建的导出。