typescript - JavaScript mall-liknande uttalande
Jag är en C++-utvecklare och jag försöker bemästra JavaScript. Jag stötte på en syntax i JavaScript som jag inte kunde hitta någon dokumentation om.
Det är samma syntax som mallar i C++. Här är ett exempel som jag fick från att läsa RxJs-handledningarna.
const subject = new Subject<number>();
Kan någon förklara för mig vilken funktion i JavaScript-språket det är? I C++ skulle "Subject" vara en mallad klass och "number" är en typparameter.
Om jag googlar på "JavaScript template", dyker något annat upp, till exempel JavaScript templatsträngar.
Som en parentes, jag tycker att JavaScript är mycket svårt att bemästra. Jag läser för närvarande en bok "Eloquent JavaScript", jag kunde inte hitta något omnämnande av den syntaxen ovan i den boken. Kan någon hänvisa mig till något bättre lärandematerial för JavaScript.
Svar #1
Det är inte exakt JavaScript, det är TypeScript, och det du ser är en generisk, en funktion som bara finns i TS. Kort sagt (för det finns mycket att upptäcka där), är JS inte typat
class Subject {
constructor() {
this.foo = null;
}
}
const subject = new Subject();
subject.foo = 'foo'; // ok
subject.foo = 42; // ok
medan TS är en superset av JavaScript som tillåter typning för att fånga potentiella fel vid kompilering:
class Subject {
foo: number;
constructor() {
this.foo = 42;
}
}
const subject = new Subject();
subject.foo = 'foo'; // invalid TS, because subject.foo must be a number, not a string
TS-generics tillåter att definiera typer på ett mer flexibelt och återanvändbart sätt:
class Subject<T> {
foo: T;
constructor() {
this.foo = null;
}
}
const subject = new Subject<number>();
subject.foo = 42; // ok, because 42 is a number
subject.foo = 'foo'; // not ok, 'foo' is a string
const anotherSubject = new Subject<string>();
subject.foo = 'foo'; // ok
