У меня есть обещание со смешанным массивом, и я использую оператор распространения, чтобы разделить выходные данные на 2 переменные, первая как IUnpackedFile, а остальные как IDescriptionBody [].
Я решил, что приведение 2 переменных с использованием ключевого слова as. Код ниже:
return Promise.all<IUnpackedFile | IDescriptionBody>([
unpackFromHttp("/data/withTexture/5782622127702409215.dat"),
...texturePromises
])
.then(([bufferArray, ...rest]) => {
// casting here
const description = (rest as IDescriptionBody[]).reduce(
(res, val) => {
res[val.CellId] = val;
return res;
},
{} as IDescription
);
const meshMaterials = extractMesh(
// casting here
(bufferArray as IUnpackedFile).result,
description
);
Почему я не могу набрать приведение вывода с использованием кортежа?
then(([bufferArray, ...rest]: [IUnpackedFile , IDescriptionBody[]])
Это ошибка, которую я получаю:
Argument of type '([bufferArray, ...rest]: [IUnpackedFile, IDescriptionBody[]]) => void' is not assignable to parameter of type '((value: (IDescriptionBody | IUnpackedFile)[]) => void | PromiseLike<void>) | null | undefined'.
Type '([bufferArray, ...rest]: [IUnpackedFile, IDescriptionBody[]]) => void' is not assignable to type '(value: (IDescriptionBody | IUnpackedFile)[]) => void | PromiseLike<void>'.
Types of parameters '__0' and 'value' are incompatible.
Type '(IDescriptionBody | IUnpackedFile)[]' is not assignable to type '[IUnpackedFile, IDescriptionBody[]]'.
Property '0' is missing in type '(IDescriptionBody | IUnpackedFile)[]'.
EDIT:
до сих пор я нашел это: Предложение: Вариативные виды
По сути, это предложение, которое обсуждается с 30 октября 2015 года.