TypeScript - вывести тип аргумента функции на основе типа, возвращаемого другой функцией - PullRequest
0 голосов
/ 18 июня 2020

У меня есть интерфейс, который выглядит следующим образом:

interface Res<R = any> {
    first?(): Promise<R>;
    second(arg: { response: R }): void;
}

Когда я создаю простой объект на основе указанного выше интерфейса, тип ответа не передается должным образом, как показано в примере ниже:

const entity: Res = {
    first: () => Promise.resolve({ name: 'Bob' }),
    second: (arg) => {
        console.log(arg.response) // is "any", but should be "{ name: string }"
    }
}

Возможно ли получить правильный тип для arg.response на основе того, что метод first() вернул?

TS Playground

1 Ответ

1 голос
/ 18 июня 2020

Вы не можете сделать это только с переменной, вы можете использовать поведение вывода функций, чтобы получить желаемое поведение:

interface Res<R = any> {
    first?(): Promise<R>;
    second(arg: { response: R }): void;
}

function createRes<T>(o: Res<T>) {
    return o
}
const entity = createRes({
    first: () => Promise.resolve({ name: 'Bob' }),
    second: (arg) => {
        console.log(arg.response)
    }
})


Ссылка на игровую площадку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...