LoginSignup
0
0

More than 1 year has passed since last update.

[TypeScript] readonly Array<T>は書けません

Last updated at Posted at 2022-08-30

導入

今日もTypeScriptのお勉強を続けています。その中で気になったところがあり、調べてみることにしました。

とりあえず結論

  • readonly Array<T>
error TS1354: 'readonly' type modifier is only permitted on array and tuple literal types.

と言われてダメになる理由がわからない。Array<T>は配列だしいいんじゃないの?と考えてしまう。

何が気になったの

function getLargest(numArray: readonly number[]): number {
  return Math.max(...numArray);
}

こんな感じのものがあったときに、仮引数の型について

numArray: readonly Array<number>

に変えてみたところ怒られました。
そこで、ReadonlyなArray(配列の中身をいじることができない型)であることを表現する方法について、調べることにしました。

ReadonlyなArray

readonly T[]

const numArray: readonly number[] = [1, 2, 3];

ReadonlyArray<T>

const numArray: ReadonlyArray<number> = [1, 2, 3];

as const

const numArray = [1, 2, 3] as const;

まとめ

上記3つが読み取り専用の配列を表現する方法のようです。
ただ、なぜreadonly Array<T>がダメなのかがずっと引っかかり続けています。
画像のようなエラーが出るということについて、コンパイラはこの文脈においてArray<T>は「配列およびタプル リテラル型」でないと解釈しているように感じられるからです。
image.png
Array<T>の定義(interface ArrayConstructor)を見に行くとCreates an array from an array-like object.とあります。このあたりがミソなのでしょうか。
すっきりしないままですが、そういうものだと思ってとりあえず学習を続けることにします。

その他

8/30: 改題しました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0