Recherche…


Remarques

Lien de documentation typographique pour les fonctions

Paramètres facultatifs et par défaut

Paramètres facultatifs

Dans TypeScript, chaque paramètre est supposé être requis par la fonction. Vous pouvez ajouter un ? à la fin d'un nom de paramètre pour le définir comme facultatif.

Par exemple, le paramètre lastName de cette fonction est facultatif:

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

Les paramètres facultatifs doivent venir après tous les paramètres non facultatifs:

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

Paramètres par défaut

Si l'utilisateur passe undefined ou ne spécifie pas d'argument, la valeur par défaut sera attribuée. Ce sont les paramètres initialisés par défaut .

Par exemple, "Smith" est la valeur par défaut du paramètre lastName .

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'

Types de fonctions

Fonctions nommées

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

Fonctions anonymes

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

Fonctions lambda / flèche

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

Fonction comme paramètre

Supposons que nous voulons recevoir une fonction en tant que paramètre, nous pouvons le faire comme ceci:

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

Si on veut recevoir un constructeur en paramètre:

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

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

Ou pour faciliter la lecture, nous pouvons définir une interface décrivant le constructeur:

interface IConstructor {
    new();
}

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

Ou avec des paramètres:

interface INumberConstructor {
    new(num: number);
}

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

Même avec les génériques:

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

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

Si nous voulons recevoir une fonction simple et non un constructeur, c'est presque pareil:

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

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

Ou pour faciliter la lecture, nous pouvons définir une interface décrivant la fonction:

interface IFunction {
    (): void;
}

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

Ou avec des paramètres:

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

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

Même avec les génériques:

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

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

Fonctions avec types d'union

Une fonction TypeScript peut prendre en compte les paramètres de plusieurs types prédéfinis à l'aide de types d'union.

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 traite ces paramètres comme un type unique qui est une union des autres types, de sorte que votre fonction doit être capable de gérer les paramètres de tout type qui se trouve dans l'union.

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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow