TypeScript泛型接口(三)

以使用接口的方式來定義一個函數需要符合的形狀:

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


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

當然也可以使用含有泛型的接口來定義函數的形狀:

interface CreateArrayFunc {
    <T>(length: number, value: T): Array<T>;
}


let createArray: CreateArrayFunc = <T extends {}>(length: number, value: T): Array<T> => {
    let result: T[] = [];
    for (let i = 0; i < length; i++) {
        result[i] = value;
    }
    return result;
}


createArray(3, 'x'); // ['x', 'x', 'x']

進一步,我們可以把泛型參數提前到接口名上:

interface CreateArrayFunc<T> {
    (length: number, value: T): Array<T>;
}


let createArray: CreateArrayFunc<any>;
createArray = function<T>(length: number, value: T): Array<T> {
    let result: T[] = [];
    for (let i = 0; i < length; i++) {
        result[i] = value;
    }
    return result;
}


createArray(3, 'x'); // ['x', 'x', 'x']

注意,此時在使用泛型接口的時候,需要定義泛型的類型。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章