[[TypeScript]]の[[インデックスアクセス型 (TypeScript)|インデックスアクセス型]]には値を指定できない。
```ts
interface Human {
id: number;
name: string;
}
const id = "id"
type Id = Human[id];
// Type 'id' cannot be used as an index type.(2538)
```
<button class="playground"><a href="https://www.typescriptlang.org/play?#code/JYOwLgpgTgZghgYwgAgBIFcC2cTIN4BQyywAJgFzIhYBG0A3EVXJhJQM5hSgDmjAvgQIIA9iE4lSyALzIARGTkEwATwAOKAJJTZGbCADaZALqMA9GeQAVdSgDkZO8gQ4QIsMjrJ07CFLjsyDgkIKQQAB7IqhoAdAAUAEwArADMABwAlARAA">Playground</a></button>
`Human["id"]`の`"id"`は値ではない。[[文字列リテラル型 (TypeScript)|文字列リテラル型]]。[[インデックスアクセス型 (TypeScript)|インデックスアクセス型]]には型しか指定できないためである。
[[typeof型演算子]]を使って[[文字列リテラル型 (TypeScript)|文字列リテラル型]]に変換されていればOK。
```ts
interface Human {
id: number;
name: string;
}
const id = "id";
type Id = Human[typeof id];
// ^? type Id = number
```
<button class="playground"><a href="https://www.typescriptlang.org/play?#code/JYOwLgpgTgZghgYwgAgBIFcC2cTIN4BQyywAJgFzIhYBG0A3EVXJhJQM5hSgDmjAvgQIIA9iE4lSyALzIARGTmMwATwAOKAJJTZGbCADaqjSJiSAuowD0V4sgB6AfgJA">Playground</a></button>
もしくは[[型エイリアス (TypeScript)|型エイリアス]]を使うか。
```ts
interface Human {
id: number;
name: string;
}
type id = "id";
type Id = Human[id];
// ^? type Id = number
```
<button class="playground"><a href="https://www.typescriptlang.org/play?#code/JYOwLgpgTgZghgYwgAgBIFcC2cTIN4BQyywAJgFzIhYBG0A3EVXJhJQM5hSgDmjAvgQJgAngAcUZZAF5kAIjJzGoicgCSpGWiw4A2mQC6jAPTHiyAHoB+AkA">Playground</a></button>