verkettbar Verfahren
Wenn Sie eine Klasse anstelle einer Funktion verwenden, können Sie die Verwendung thisArt zum Ausdruck bringen , dass eine Methode , um die Instanz zurückgibt sie aufgerufen wurde (Verkettungsverfahren) .
ohne this:
class StatusLogger {
log(message: string): StatusLogger { ... }
}
// this works
new ErrorLogger().log('oh no!').log('something broke!').log(':-(');
class PrettyLogger extends StatusLogger {
color(color: string): PrettyLogger { ... }
}
// this works
new PrettyLogger().color('green').log('status: ').log('ok');
// this does not!
new PrettyLogger().log('status: ').color('red').log('failed');
mit this:
class StatusLogger {
log(message: string): this { ... }
}
class PrettyLogger extends StatusLogger {
color(color: string): this { ... }
}
// this works now!
new PrettyLogger().log('status:').color('green').log('works').log('yay');
verkettbar Funktion
Wenn eine Funktion verkettbar ist, können Sie es mit einer Schnittstelle eingeben:
function say(text: string): ChainableType { ... }
interface ChainableType {
(text: string): ChainableType;
}
say('Hello')('World');
Verkettbaren Funktion mit Eigenschaften / Methoden
Wenn eine andere Funktion Eigenschaften oder Methoden (wie hat jQuery(str)vs jQuery.data(el)), können Sie die Funktion selbst als Schnittstelle eingeben:
interface SayWithVolume {
(message: string): this;
loud(): this;
quiet(): this;
}
const say: SayWithVolume = ((message: string) => { ... }) as SayWithVolume;
say.loud = () => { ... };
say.quiet = () => { ... };
say('hello').quiet()('can you hear me?').loud()('hello from the other side');