Я хочу создать шаблонную функцию с машинописным шрифтом, как указано ниже, но тип возвращаемого значения функции всегда один и тот же (Менеджер), любой может помочь мне исправить это правильно?
interface Manager {
string: string,
number: number,
}
let Agents: { [name: string]: Manager} = {};
function get<T>(agent: string, type ?: T): T extends keyof Manager ? Manager[T] : Manager {
return type ? Agents[agent][type.toString()] : Agents[agent];
}
let managers = get("test"); // Show manager type, correct
let stringManager = get("", "string"); // Show manager type, but I want to it retrun string type
let numberManager = get("", "number"); // Show manager type, but I want to it retrun number type
Когда я кодирую следующим образом, правильно, но код слишком длинный
function get<T extends keyof Manager>(agent: string, type: T): Manager[T];
function get(agent: string): Manager;
function get<T extends keyof Manager>(agent: string, type?: T) {
return type ? Agents[agent][type] : Agents[agent];
}
let managers = get("test"); // Show manager type, correct
let stringManager = get("", "string"); // Show string type, correct
let numberManager = get("", "number"); // Show number type, correct