基于其他类型的Typescript定义类方法名称
发布时间:2022-04-12 15:54:38 247
相关标签: # es6
比如说,我有一堆类做类似的事情(例如,在这个例子中添加到一个集合中),但它们做的事情非常不同。手写出来的代码如下:
class Foo {
fooSet: Set = new Set()
addFoo(foo: string) {
this.fooSet.add(foo)
}
delFoo(foo: string) {
this.fooSet.delete(foo)
}
// Foo code
}
class Bar{
barSet: Set = new Set()
addBar(bar: string) {
this.barSet.add(bar)
}
delBar(bar: string) {
this.barSet.delete(bar)
}
// Bar code
}
那是许多无用的工作。相反,我想做一个函数namedSet(name: string)
返回一个包含所有这些方法的类。我的第一次尝试是:
export const NamedSet = (name: N) => {
const lowerName = name.toLowerCase() as Lowercase;
const capitalName = name[0].toUpperCase() + name.substring(1) as Capitalize;
return class {
private readonly [`${lowerName}Set`]: Set = new Set();
[`add${capitalName}`](str: string): void {
this[`${lowerName}Set`].add(str);
}
[`del${capitalName}`](str: string): void {
this[`${lowerName}Set`].delete(str);
}
}
}
然而,这失败了,因为A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type.
(集合初始化器)和Type '
${Lowercase}集' cannot be used to index type 'this'.
(在方法内部)如果类知道它有错误,我相信第二个错误将被修复${Lowercase
但是,TS不允许我用正常的JS方式定义它。这可能吗?如果可能,如何实现?
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报