typescript 用于多个泛型方法的类型脚本模式

tmb3ates  于 2023-03-19  发布在  TypeScript
关注(0)|答案(1)|浏览(101)

假设我有一个类(Person),它有两个可以有多个实现的方法(getFirstNamegetSurname),这些实现可以自由组合,以创建每一个置换,那么如果每个函数有两个实现:ABab,可能的排列是AaAbBaBb .在这种情况下,如果我使用简单继承,我将需要四个独立的子类.
使用C++,可以使用模板执行以下操作:

abstract class FirstName {
    public abstract getFirstName?(data: string): string | null;
}

abstract class Surname {
    public abstract getSurname?(data: string): string | null;
}

class Person<A extends FirstName, B extends Surname> implements A, B {
   constructor() {}
}

const person = new Person<FirstNameImplementation1, SurnameImplementation1>();
console.log(person.getFirstName());

以上在Typescript中不起作用。person的定义应该在编译时发生,泛型类型应该在示例化时很容易指定。有没有办法在Typescript中正确地完成以上操作?我意识到我可以将函数作为参数传递,但我认为一定有办法巧妙地使用泛型完成这一操作。

b4lqfgs4

b4lqfgs41#

我有一个可行的解决办法,但我想还有更好的办法:

type GetFirstName = (data: string) => string | null;

type GetSurname = (data: string) => string | null;

class Person {
   constructor(getFirstName?: GetFirstName, getSurname?: GetSurname) {
       if (getFirstName) this.getFirstName = getFirstName;
       if (getSurname) this.getSurname = getSurname;
   }

   public getFirstName?(data: string): string | null;
   public getSurname?(data: string): string | null;
}

const person = new Person(FirstNameImplementation1);
console.log(person.getFirstName.?());

相关问题