Что такое аргумент GenericType в определении Typescript Promise <GenericType>? - PullRequest
0 голосов
/ 08 июня 2018

Просто любопытно, обещает ли обобщенный тип в Typescripts Promise<GenericType> определение типа объекта, переданного в обработчик then?

Например, это работает:

    const pr:Promise<Array<Number>> = Promise.resolve([1, 2, 3]);

    const handler = (arg:Array<Number>)=> {
       console.dir(arg);
    }

    pr.then(handler);

Другойсвязанный вопрос.Если мы сделаем handler a handler:Function, то vscode будет жаловаться / рисовать красные загогулины под частью pr.then(handler кода.Есть ли в машинописи тип, который можно назначить функциям-обработчикам?

1 Ответ

0 голосов
/ 08 июня 2018

Просто хотел убедиться, что часть GenericType является типом возврата, являющимся результатом асинхронной операции, выполняемой обещанием?

Не совсем.В вашем примере нет универсального типа: вы дали всему конкретный тип.

То, что вы хотите (я думаю), таково:

const pr:Promise<Array<Number>> = Promise.resolve([1, 2, 3]);

// handler here is declared with type Array<Number> -> void
const handler = (arg:Array<Number>): void => { // NOTE: void
   console.dir(arg);
}

pr.then(handler);

Чтобы проиллюстрировать сохранение типа (инеобходимость этого):

// doubleToString has type Number -> String
const doubleToString = (n: Number): String => (n * 2).toString();
const doubledAndStringed: Promise<Array<String>> = pr.then(arr => arr.map(doubleToString));

Принимая во внимание следующее:

const repeatString = (s: String): String => s.repeat(1);
const repeated: Promise<Array<String>> = pr.then(arr => arr.map(repeatString))

Если у вас есть функция, которая возвращает Promise в зависимости от типа ее аргумента, вы используете универсальный тип:

const wrap = (x: T): Promise<T> => Promise.resolve(x);

Здесь T является универсальным типом, а машинописный текст сохранит тип аргумента * :

const wrappedString: Promise<String> = wrap('hello!');

Здесь wrappedString будет иметьэтот конкретный тип, независимо от того, аннотируете ли вы его или нет.

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