配列の型の定義はArray<T>型を使う方法と型の後ろにT[]を付ける方法の2通りあります。Array<T>とT[]の違いはありません。
const foo: Array = [
'foo',
'bar',
'baz',
];
const foo2: string[] = foo; タプル
もし個数や順番、または型がバラバラな型の集まりが決まっているのであれば[A, B, C, D, E]と[]の間に型を羅列した型を定義します。
const foo: [string, number, boolean] = [
'foo',
123,
true,
];もしタプルを定数化したいなら、指定する型も厳密にしてあげるだけです。
const a: readonly ['foo', 123, true] = [
'foo',
123,
true,
];ですがこれであれば後ろに値宣言後にas constを付けることで同じ意味にできます。(できればObject.freezeで凍結化もしておくと良いと思います)
const a = [
'foo',
123,
true,
] as const;
// a: readonly ["foo", 123, true]例えば引数に上で定義した配列の中のどれかを渡してほしいような関数を定義したいなら、
typeof a[number];
// 'foo' | 123 | trueでユニオン化することができるので、あとは型として使うだけです。
配列の絞り込み
Union 型などを配列に絞り込みたい場合は、Array.isArrayメソッドを使います。
const foo: string | string[] = [];
if (Array.isArray(foo)) {
foo; // foo: string[]
}