Как инициализировать массив для типа кортежа в TypeScript? - PullRequest
1 голос
/ 04 июня 2019

Я делаю веб-приложение судоку с помощью React / Redux.Но я столкнулся с некоторой проблемой при наборе текста.

Текущий код:

// typedef
type Tuple9<T> = [T, T, T, T, T, T, T, T, T];

export type Board = Tuple9<Tuple9<number>>;

// code using board type, I want to fix getEmptyBoard() to more programmatic.
const getEmptyBoard: (() => Board) = () => {
  return [
    [0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0]
  ];
};

Я хочу исправить getEmptyBoard() на более программный.

  1. Есть ли хорошийрешение для этой ситуации?
  2. Если 1, что такое решение?

Ответы [ 2 ]

1 голос
/ 04 июня 2019

За 9 Я бы сделал то, что ты сделал.

В противном случае вы бы следовали старому функциональному программированию, говоря: If its pure on the outside, it doesn't matter if its impure on the inside, и стратегически использовали бы Tuple9 утверждение типа :

type Tuple9<T> = [T, T, T, T, T, T, T, T, T];
function make9<T>(what: T): Tuple9<T> {
    return new Array(9).fill(what) as Tuple9<T>;
}

export type Board = Tuple9<Tuple9<number>>;
function makeBoard(): Board {
    return make9(make9(0));
}
1 голос
/ 04 июня 2019

Типы не существуют во время выполнения, что означает, что нет никакого способа сказать «данный массив времени выполнения сборки A типа A»

Более программный способ его создания будет выглядеть примерно так:

new Array(9).fill(0).map(() => new Array(9).fill(0))
...