簡體   English   中英

打字稿通用類型不可分配錯誤

[英]Typescript Generic type not assignable error

嘗試創建泛型,但顯示錯誤:類型“ User []”無法分配給類型T [],無法理解這樣做的錯誤之處-

interface User {
    name: string,
    age: number
}

interface Movie {
    title: string,
    language: string
}

function getItems<T>(arg: number|string): T[] {
    let useList: User[] = [];
    let movieList: Movie[] = [];
    if (typeof arg == 'string') {
        return useList;
    } else {
        return movieList;
    }
}

var a: User[] = getItems<User>('user_list');

您應該為您的情況使用函數重載,而不是泛型。

請注意,帶有實現的函數簽名將被編譯器隱藏。

function getItems(arg: string): User[];
function getItems(arg: number): Movie[];
function getItems(arg: number | string) {
    let useList: User[] = [];
    let movieList: Movie[] = [];
    if (typeof arg == 'string') {
        return useList;
    } else {
        return movieList;
    }
}

var a = getItems('user_list');

問題在於您的函數不是真正的泛型。 使用通用參數時,您無法返回特定類型,您需要尊重傳遞給您的通用參數。 可以完成您想要的功能的函數簽名就是使用重載的函數簽名

function getItems(arg: string): User[] 
function getItems(arg: number): Movie []  
function getItems(arg: number|string): User[] | Movie []  {
    let useList: User[] = [];
    let movieList: Movie[] = [];
    if (typeof arg == 'string') {
         return useList;
    } else {
         return movieList;
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM