土台のタイプの-07-機能TypeScript-

タイプ機能

JavaScript関数は、ファーストクラスの市民で

関数の宣言

:関数宣言(関数宣言)発現および機能(関数式) - JavaScriptでは、関数を定義した2つの一般的な方法があります

// 函数声明(Function Declaration)
function sum(x, y) {
    return x + y;
}

// 函数表达式(Function Expression)
let mySum = function (x, y) {
    return x + y;
};

関数の入力と出力は、活字体制約的には、関数型定義文は、比較的単純であり、アカウントに入力と出力の両方を取ることが必要です。

function sum(x: number, y: number): number {
    return x + y;
}

なお、余分な(または必須未満)のパラメータを入力し、それが許可されていません

function sum(x: number, y: number): number {
    return x + y;
}
sum(1, 2, 3);

// index.ts(4,1): error TS2346: Supplied parameters do not match any signature of call target.
function sum(x: number, y: number): number {
    return x + y;
}
sum(1);

// index.ts(4,1): error TS2346: Supplied parameters do not match any signature of call target.

関数式

我々は今、関数式(関数式)の定義を書きたい場合は次のように書くことができます。

let mySum = function (x: number, y: number): number {
    return x + y;
};

これは、コンパイルすることができるされているが、実際には、唯一の等号の右側の匿名関数に上記のコードは、型定義した、および等号の左側がmySum操作型推論および推論によって割り当てです。私たちは手動でする必要がある場合はmySum種類を追加し、それは次のようにする必要があります:

let mySum: (x: number, y: number) => number = function (x: number, y: number): number {
    return x + y;
};

活字体混同しないように注意してください=>にしてES6を=>

活字体の型の定義は、=>関数定義を表すために使用される、左入力タイプは、右出力タイプであり、必要な括弧です。

ES6では、=>矢印の関数を呼び出し、[] [ES6矢印関数]を参照することができ、広く使用されています。

インタフェース定義された関数の形状

また、インタフェースを使用した行の関数の形状を定義する必要があります。

interface SearchFunc {
    (source: string, subString: string): boolean;
}

let mySearch: SearchFunc;
mySearch = function(source: string, subString: string) {
    return source.search(subString) !== -1;
}

オプションのパラメータ

先に述べたように、パラメータ(必須以下)余分な入力は、許可されていません。それでは、どのようにオプションのパラメータを定義していますか?

同様のオプションの属性インタフェースは、我々は、?オプションの引数を表します:

function buildName(firstName: string, lastName?: string) {
    if (lastName) {
        return firstName + ' ' + lastName;
    } else {
        return firstName;
    }
}
let tomcat = buildName('Tom', 'Cat');
let tom = buildName('Tom');

オプションのパラメータは、必要なパラメータの後に接続しなければならないことに注意してください。言い換えれば、オプションのパラメータの後ろに、もはや必要なパラメータが許可されません

function buildName(firstName?: string, lastName: string) {
    if (firstName) {
        return firstName + ' ' + lastName;
    } else {
        return lastName;
    }
}
let tomcat = buildName('Tom', 'Cat');
let tom = buildName(undefined, 'Tom');

// index.ts(1,40): error TS1016: A required parameter cannot follow an optional parameter.

パラメータデフォルト

ES6では、我々は関数のパラメータは、デフォルト値を追加することができ、オプションのパラメータのデフォルト値を識別するためのパラメータを追加しますtypescriptです

function buildName(firstName: string, lastName: string = 'Cat') {
    return firstName + ' ' + lastName;
}
let tomcat = buildName('Tom', 'Cat');
let tom = buildName('Tom');

この時点では、制約の「オプションのパラメータは、必要なパラメータの背面に接続しなければならない」ではありません。

function buildName(firstName: string = 'Tom', lastName: string) {
    return firstName + ' ' + lastName;
}
let tomcat = buildName('Tom', 'Cat');
let cat = buildName(undefined, 'Cat');

デフォルトパラメータについて、参照は[] [関数パラメータのES6デフォルト値]であってもよいです。

残りのパラメータ

ES6を用いることができる...rest。実施形態は、残りのパラメータ(残りパラメータ)の関数を取得します

function push(array, ...items) {
    items.forEach(function(item) {
        array.push(item);
    });
}

let a = [];
push(a, 1, 2, 3);

実際には、items配列。だから我々は、配列の型を定義するためにそれを使用することができます。

function push(array: any[], ...items: any[]) {
    items.forEach(function(item) {
        array.push(item);
    });
}

let a = [];
push(a, 1, 2, 3);

[] [残りはES6パラメータ]を参照して、残りのパラメータはパラメータだけの最後の引数、休息することができ、注意してください。

オーバーロード

過負荷場合関数は異なる処理にパラメータの異なる数またはタイプを受け入れることを可能にします。

例えば、我々は、機能を実装する必要があるreverse番号を入力し、123ときに反転デジタル出力321、入力文字列'hello'出力が文字列を逆転させました'olleh'

共同タイプの使用は、私たちは達成することができます:

function reverse(x: number | string): number | string {
    if (typeof x === 'number') {
        return Number(x.toString().split('').reverse().join(''));
    } else if (typeof x === 'string') {
        return x.split('').reverse().join('');
    }
}

しかし、これは正確に表現できないという欠点、デジタル入力を有し、出力数、文字列入力であるべきで、出力が文字列でなければなりません。

現時点では、複数のオーバーロードされた定義に使用できるreverse機能の種類を:

function reverse(x: number): number;
function reverse(x: string): string;
function reverse(x: number | string): number | string {
    if (typeof x === 'number') {
        return Number(x.toString().split('').reverse().join(''));
    } else if (typeof x === 'string') {
        return x.split('').reverse().join('');
    }
}

上記の例では、我々はリピート機能の数を定義reverse、以前のすべての関数定義を、最後の実装の関数です。エディタでコードヒントは、あなたが正しい最初の二つのヒントを見ることができます。

注、活字体が正面から試合定義関数を起動を優先させて頂きますので、あなたが複数の関数定義された包含関係を持っている場合、あなたは正確な定義の社説を優先する必要があります。

  • この記事では、を意味しxcatliu

おすすめ

転載: www.cnblogs.com/idspring/p/11784710.html