[英]Typescript error with generic “Argument of type 'X' is not assignable to parameter of type T”
[英]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.