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