Как убедиться, что атрибут является подмассивом другого атрибута в машинописном тексте? - PullRequest
1 голос
/ 14 июля 2020

Я хотел бы создать интерфейс, в котором значения одного атрибута массива могут быть только подмножеством значений другого атрибута массива. Итак, это будет работать так:

interface Arrays {
    array: string[],
    subArray: ... // some type, string[] is not enough
}

const arrayOne: Arrays = {
    array: ['a', 'b', 'c'],
    subArray: ['a', 'b'], // ok, both 'a' and 'b' are in array
};

const arrayTwo: Arrays = {
    array: ['a', 'b', 'c'],
    subArray: ['a', 'd'], // incorrect type, 'd' is not in array
};

Я могу проверить это во время выполнения, но есть ли способ сделать это в машинописном тексте?

1 Ответ

1 голос
/ 14 июля 2020

Один из способов - извлечь допустимые значения, например,

type AllowedChars = ["a", "b", "c"]

interface Arrays<T> {
  array: T,
  subArray: Partial<T>
}

const arrayOne: Arrays<AllowedChars> = {
  array: ['a', 'b', 'c'],
  subArray: ['a', 'b'], // ok, both 'a' and 'b' are in array
};

const arrayTwo: Arrays<AllowedChars> = {
  array: ['a', 'b', 'c'],
  subArray: ['a', 'd'], // incorrect type, 'd' is not in array
};
...