#typescript #typescript-typings
Вопрос:
Кто-нибудь знает, почему это происходит в соответствии с VSCode?
interface Point { x: number; y: number; } let grid: [key: number, value: [key: number, value: Point]]; // ... // Gives an object of type number | [key: number, value: Point] var col = grid[-5]; // Gives an object of type number | Point var pnt = (col as [key: number, value: Point])[-2];
Кто-нибудь может объяснить, пожалуйста?
Я хочу, чтобы у них не было number |
Ответ №1:
Этот:
let grid: [key: number, value: [key: number, value: Point]];
объявляет тип кортежа: массив с 2 членами, где первый имеет тип number
, а второй-другой кортеж, например:
[3, [4, somePoint]]
Используйте объект вместо массива, чтобы grid[someNum]
получить столбец:
let grid: { [key: number]: { [key: number]: Point; }; }
Вы также можете рассмотреть возможность использования карты вместо динамических имен свойств (карты лучше подходят для такого рода вещей, и вы иногда будете сталкиваться с проблемами с такого рода динамическими именами свойств в машинописном тексте).
type Col = Maplt;number, Pointgt;; const grid = new Maplt;number, Colgt;();
Ответ №2:
Переменная let grid
инициализируется здесь:
let grid: [key: number, value: [key: number, value: Point]];
Здесь «ключу» присваивается номер. Если вы не хотите, чтобы он возвращал эту часть, вам нужно удалить key: number
часть кода