#typescript #typescript-generics
#typescript #typescript-generics
Вопрос:
Это достаточно просто, если тип не имеет значения, но я надеялся сохранить возвращаемый тип. Я пробовал это, но он просто говорит, что функция getData () возвращает «неизвестно».
Упрощенный пример:
class DataHolder<DataType> {
data: DataType;
constructor(data: DataType) {
this.data = data;
}
}
function getData<U, T extends DataHolder<U>>(holder: T) {
return holder.data;
}
let x = getData(new DataHolder<number>(10));
let y = x * 3; // error x is unknown
Ответ №1:
Вы используете слишком много дженериков. getData
полиморфен только одним способом, поэтому ему нужен только один универсальный.
function getData<T>(holder: DataHolder<T>): T {
return holder.data;
}
В качестве альтернативы:
function getData<T extends DataHolder<any>>(holder: T): T['data'] {
return holder.data;
}
Оба будут работать, как ожидалось.