с использованием TypeScript Я хочу создать массив значений, используя объект определения порядка.
Предположим, следующий пример:
- значения являются столбцом таблицы
headers
- заказ - запрашиваемый
order
этих столбцов
Типы:
type H = {title: string, description: string};
type O = { [key in keyof H]: number };
const headers: H = {
description: 'Description',
title: 'Title',
}
const order: O = {
title: 0,
description: 1,
}
(предположим, что значения в order
всегда "нормализованы", чтобы быть действительными индексами массива (они являются уникальными положительными инициаторами в последовательном порядке, начиная с 0)
Я хочу следующий вывод:
['Title', 'Description']
Я надеялся, что ниже будет работать:
mapToArray = (headers: H, order: O): string[] => {
let result: string[] = [];
for (let k in headers) {
result[order[k]] = headers[k];
}
return result;
}
однако я получаю следующую ошибку:
Type 'H[Extract<keyof H, string>]' is not assignable to type 'string[][O[Extract<keyof H, string>]]'.
Type 'H' is not assignable to type 'string[]'.
Type 'H[Extract<keyof H, string>]' is not assignable to type 'string'.
Type 'H[string]' is not assignable to type 'string'.
Есть предложения, как это исправить? Заранее спасибо.
Параметры компилятора TS:
"compilerOptions": {
"plugins": [
{
"name": "tslint-language-service"
}
],
"target": "es6",
"lib": [
"dom",
"es2015",
"es2017.object",
"es2016.array.include"
],
"module": "esnext",
"moduleResolution": "node",
"skipLibCheck": true,
"removeComments": true,
"preserveConstEnums": true,
"sourceMap": false,
"outDir": "build",
"jsx": "preserve",
"experimentalDecorators": true,
"noUnusedParameters": true,
"noUnusedLocals": true,
"declaration": false,
"allowJs": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true
}