Шаблон функции типа повторного запуска - PullRequest
0 голосов
/ 09 апреля 2020

Я хочу создать шаблонную функцию с машинописным шрифтом, как указано ниже, но тип возвращаемого значения функции всегда один и тот же (Менеджер), любой может помочь мне исправить это правильно?

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...