Как определить подтип generi c в TypeScript? - PullRequest
0 голосов
/ 21 июня 2020

У меня есть функция с некоторым типом аргумента:

function func<T extends {field1: string}>(arg1: T) {
 // function's code
}

У меня есть знакомый интерфейс с типом generi c, например:

interface SomeInterface<T> {
    field1: string;
}

Теперь я хочу сделать вывод generi c параметр интерфейса и назначить его типу возвращаемого значения функции:

const value1: SomeInterface<number> = {field1: "Hello"};

const res1 = func(value1);

Мне нужен тип для res1 is number .

Какую подпись функции мне нужно использовать?

function func<T extends {field1: string}>(arg1: T) : T extends ???? { // What?

1 Ответ

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

Нет смысла использовать общий тип c в интерфейсе, если на этот тип не ссылается какой-либо атрибут.

Вот интерфейс, который получает общий тип c и применяет его введите один из его атрибутов:

interface SomeInterface<T> {
    field1: T;
}

С другой стороны, если вы хотите создать функцию с общим c возвращаемым типом:

function func<T>(): T {
 // code
}

// function call
const res1 = func<number>();

И, наконец, если вы хотите ваша функция для получения в качестве аргумента типа generi c и возврата другого типа generi c:

function func<T, R>(arg: T) : R {
 // code
}

// function call
const res1 = func<SomeInterface, number>(value1);

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