7

Какова синтаксис стрелочных функций TypeScript с обобщениями?

1

На данный момент в руководстве по TypeScript нет информации об стрелочных функциях. Обычные функции могут быть обобщенно типизированы с помощью следующего синтаксиса:

function identity<T>(arg: T): T {
    return arg;
}

Какой синтаксис следует использовать для стрелочных функций?

5 ответ(ов)

3

В файле .tsx вы не можете просто написать <T>, но это будет работать:

const foo = <T, >(x: T) => x;

В отличие от «хака» с extends {}, этот подход по крайней мере сохраняет суть.

0

Этот код работает для меня:

const Generic = <T>(value: T) => {
    return value;
}

Здесь мы создаем универсальную функцию Generic, которая принимает параметр типа T и возвращает его. Это позволяет использовать функцию для различных типов данных.

0

В спецификации языка на стр. 64 и далее указано, что конструкция вида < T > ( ... ) => { ... } может быть интерпретирована как выражение стрелочной функции с параметром типа или как утверждение типа, применяемое к стрелочной функции без параметра типа. Однако на практике она разрешается как первое.

Вот пример:

// Вспомогательная функция, необходимая, потому что sync в Backbone-couchdb не возвращает jqxhr
let fetched = <R extends Backbone.Collection<any>>(c: R) => {
    return new Promise(function (fulfill, reject) {
        c.fetch({reset: true, success: fulfill, error: reject});
    });
};

В этом примере создается функция, которая принимает коллекцию R, расширяющую Backbone.Collection. При этом используется обобщенный тип для корректного Fetch-запроса.

0

Конечно! Вот перевод на русский в стиле ответа на StackOverflow.com:


Хотя решение было предложено не так давно, в ES6 нет необходимости использовать extends, и это все равно работает для меня... 😃

let getArray = <T>(items: T[]): T[] => {
    return new Array<T>().concat(items);
}

let myNumArr = getArray<number>([100, 200, 300]);
let myStrArr = getArray<string>(["Hello", "World"]);
myNumArr.push(1);
console.log(myNumArr);

В данном коде мы определяем универсальную функцию getArray, которая принимает массив элементов типа T и возвращает новый массив, используя метод concat. Это позволяет нам создавать массивы различных типов, как видно из примеров с числовым и строковым массивами. После добавления элемента в числовой массив через push, мы можем увидеть результат в консоли.

Если есть вопросы или нужно что-то уточнить — не стесняйтесь задавать!

0

Это работает для меня

const logSomething = <T>(something: T): T => {
    return something;
}

Функция logSomething является универсальной (generic) и принимает один аргумент something любого типа T, а затем возвращает этот же аргумент. Она может быть полезна для логирования или в ситуациях, когда нужно возвращать переданное значение без изменений.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь