Suche…


Bemerkungen

Link zur TypScript-Dokumentation für Funktionen

Optionale und Standardparameter

Optionale Parameter

In TypeScript wird davon ausgegangen, dass jeder Parameter von der Funktion benötigt wird. Sie können ein hinzufügen ? am Ende eines Parameternamens, um ihn als optional festzulegen.

Der lastName Parameter dieser Funktion ist beispielsweise optional:

function buildName(firstName: string, lastName?: string) {
    // ...
}

Optionale Parameter müssen hinter allen nicht optionalen Parametern stehen:

function buildName(firstName?: string, lastName: string) // Invalid

Standardparameter

Wenn der Benutzer undefined übergibt oder kein Argument angibt, wird der Standardwert zugewiesen. Diese Parameter werden als Standardinitialisierungsparameter bezeichnet .

Beispielsweise ist "Smith" der Standardwert für den lastName Parameter.

function buildName(firstName: string, lastName = "Smith") {
    // ...
}
buildName('foo', 'bar');      // firstName == 'foo', lastName == 'bar'
buildName('foo');             // firstName == 'foo', lastName == 'Smith'
buildName('foo', undefined);  // firstName == 'foo', lastName == 'Smith'

Arten von Funktionen

Benannte Funktionen

function multiply(a, b) {
    return a * b;
}

Anonyme Funktionen

let multiply = function(a, b) { return a * b; };

Lambda / Pfeil-Funktionen

let multiply = (a, b) => { return a * b; };

Funktion als Parameter

Angenommen, wir möchten eine Funktion als Parameter erhalten, können wir dies folgendermaßen tun:

function foo(otherFunc: Function): void {
    ...
}

Wenn wir einen Konstruktor als Parameter erhalten wollen:

function foo(constructorFunc: { new() }) {
    new constructorFunc();
}

function foo(constructorWithParamsFunc: { new(num: number) }) {
    new constructorWithParamsFunc(1);
}

Oder um das Lesen zu erleichtern, können wir eine Schnittstelle definieren, die den Konstruktor beschreibt:

interface IConstructor {
    new();
}

function foo(contructorFunc: IConstructor) { 
    new constructorFunc();
}

Oder mit Parametern:

interface INumberConstructor {
    new(num: number);
}

function foo(contructorFunc: INumberConstructor) {
    new contructorFunc(1);
}

Auch bei Generika:

interface ITConstructor<T, U> {
    new(item: T): U;
}

function foo<T, U>(contructorFunc: ITConstructor<T, U>, item: T): U {
    return new contructorFunc(item);
}

Wenn wir eine einfache Funktion und keinen Konstruktor erhalten wollen, ist das fast dasselbe:

function foo(func: { (): void }) {
    func();
}

function foo(constructorWithParamsFunc: { (num: number): void }) {
    new constructorWithParamsFunc(1);
}

Oder um das Lesen zu erleichtern, können wir eine Schnittstelle definieren, die die Funktion beschreibt:

interface IFunction {
    (): void;
}

function foo(func: IFunction ) { 
    func();
}

Oder mit Parametern:

interface INumberFunction {
    (num: number): string;
}

function foo(func: INumberFunction ) {
    func(1);
}

Auch bei Generika:

interface ITFunc<T, U> {
    (item: T): U;
}

function foo<T, U>(contructorFunc: ITFunc<T, U>, item: T): U {
    return func(item);
}

Funktionen mit Unionstypen

Eine TypeScript-Funktion kann Parameter mehrerer vordefinierter Typen aufnehmen, die Unionstypen verwenden.

function whatTime(hour:number|string, minute:number|string):string{
    return hour+':'+minute;
}

whatTime(1,30)         //'1:30'
whatTime('1',30)       //'1:30'
whatTime(1,'30')       //'1:30'
whatTime('1','30')     //'1:30'

Typescript behandelt diese Parameter als einen einzigen Typ, der eine Vereinigung der anderen Typen darstellt. Ihre Funktion muss daher in der Lage sein, Parameter eines beliebigen Typs zu behandeln, der in der Union enthalten ist.

function addTen(start:number|string):number{
    if(typeof number === 'string'){
        return parseInt(number)+10;
    }else{
        else return number+10;
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow