89338


TypeScriptにおいて，ある文字列変数の内容によって特定の変数の型（`test`とします）を自動的に設定されるようにしたいです。  
具体的な例を挙げると，

[code]

    const type = "basic_string<char, char_traits<char>, allocator<char> >";
    
[/code]

のとき，変数 `test` の型は `string`

[code]

    const type = "unsigned int";
    
[/code]

や

[code]

    const type = "float";
    
[/code]

などのときは変数 `test` の型は `number` と自動的に設定されるような処理を知りたいです。


CC BY-SA 4.0
2022-06-08T10:34:01.000
89295
2022-06-11T17:03:05.183
35941
question
typescript
変数の内容によって特定の変数の型を決定する方法


条件付きタイプ（[`Conditional
Types`](https://www.typescriptlang.org/docs/handbook/2/conditional-
types.html)）を使用する例です。変数 `spec` に依存して変数 `test` の型が決まります。

[code]

    type StringSpec = "basic_string<char, char_traits<char>, allocator<char> >"
    type NumberSpec = "unsigned int" | "float"
    type Spec = StringSpec | NumberSpec
    type TypeBySpec<T extends Spec> =
        T extends StringSpec ? string
        : T extends NumberSpec ? number
        : never
    
    const spec: Spec = "unsigned int"
    let test: TypeBySpec<typeof spec>  // test は number型
    
[/code]

`spec` が実行時に計算される場合は、`test` の型も実行時にしか定まらないので、`string | number` になります。

[code]

    // 実行時に値が決まる場合
    const spec: Spec = ((new Date().getSeconds()) >= 30)
        ? "basic_string<char, char_traits<char>, allocator<char> >"
        : "unsigned int"
    
    let test: TypeBySpec<typeof spec>  // test は「string | number」型
    
[/code]


CC BY-SA 4.0
2022-06-11T16:57:21.900
89338
2022-06-11T17:03:05.183
2022-06-11T17:03:05.183
3054
3054
89295
answer