typ lub interfejs wewnątrz klasy w TypeScript
Mam klasę generyczną, która używa innego typu pochodnego (opartego na tym typie generycznym). Chciałbym zdefiniować typ pochodny wewnątrz klasy, aby nie musieć go pisać za każdym razem, ale TypeScript wyrzuca mi błąd.
aktualna wersja (działająca):
class MyClass<T> {
t: T
doSomeThing(f: (t: T) => void) {}
doAnotherThing(g: (t: T) => void) {}
}
Wersja, której chcę (nie działa):
class MyClass<T> {
static type FT = (t: T) => void
// throws error: I can't define type or interface inside class
t: T
doSomeThing(f: FT) {}
doAnotherThing(g: FT) {}
}
Jaka jest właściwa metoda i rozwiązanie. Dziękuję.
Odpowiedź #1
Możesz użyć zadeklarowanej właściwości lub może przestrzeni nazw
class MyClass<T> {
// it's instance property. It does not exists actually.
declare readonly FT: (t: T) => void;
doSomeThing(f: typeof this.FT) {}
doAnotherThing(g: MyClass.FT<T>) {}
}
declare namespace MyClass {
export type FT<T> = (t: T) => void
}
new MyClass<123>().doSomeThing
// ^?
// (method) MyClass<123>.doSomeThing(f: (t: 123) => void): void
new MyClass<123>().doAnotherThing
// ^?
// (method) MyClass<123>.doAnotherThing(g: (t: 123) => void): void
