javascript - Skicka klass som generisk parameter Typescript
jag försöker skapa en instans av en klass som skickas som parameter till en annan, jag har detta i en fil, ImportedClass.ts:
export default class ImportedClass {
public constructor(something: any) {
}
public async exampleMethod() {
return "hey";
}
}
Och detta i en annan, InstanceClass.ts:
interface GenericInterface<T> {
new(something: any): T;
}
export default class InstanceClass <T> {
private c: GenericInterface<T>;
public constructor(c: T) {
}
async work() {
const instanceTry = new this.c("hello");
instanceTry.exampleMethod();
}
}
Och detta i en annan, ClassCaller.ts: <--REDIGERAD-->
import ImportedClass from './ImportedClass';
import ImportedClass from './InstanceClass';
const simulator = new InstanceClass <ImportedClass>(ImportedClass);
Sedan när jag kallar det så här:
simulator.work();
Det ger detta fel:
error TS2339: Property 'exampleMethod' does not exist on type 'T'.
All hjälp är välkommen, tack.
Svar #1
Om T måste ha en metod med namnet exampleMethod måste du inkludera detta i begränsningen för T på Simulator för att kunna använda den inuti Simulator:
export class ImportedClass {
public constructor(something: any) {
}
public async exampleMethod() {
return "hey";
}
}
interface GenericInterface<T> {
new(something: any): T;
}
export class Simulator<T extends { exampleMethod(): Promise<string> }> {
public constructor(private c: GenericInterface<T>) {
}
async work() {
const instanceTry = new this.c("hello");
await instanceTry.exampleMethod();
}
}
const simulator = new Simulator(ImportedClass);
simulator.work()
Lekplatslänk
Det fanns andra små problem som behövde åtgärdas för att koden ovan skulle fungera, men det är det huvudsakliga problemet.
