TypeScript array to string literal type

后端 未结 3 1520
迷失自我
迷失自我 2020-11-27 13:08

I currently have both an array of strings and a string literal union type containing the same strings:

const furniture = [\'chair\', \'table\', \'lamp\'];
ty         


        
3条回答
  •  佛祖请我去吃肉
    2020-11-27 13:22

    Update for TypeScript 3.0 :

    With the use of generic rest parameters, there is a way to correctly infer string[] as a literal tuple type and then get the union type of the literals.

    It goes like this:

    const tuple = (...args: T) => args;
    const furniture = tuple('chair', 'table', 'lamp');
    type Furniture = typeof furniture[number];
    

    More about generic rest parameters

    Update for TypeScript 3.4:

    TypeScript version 3.4 has introduced so-called const contexts, which is a way to declare a tuple type as immutable and get the narrow literal type directly (without the need to call a function like shown above).

    With this new syntax, we get this nice concise solution:

    const furniture = ['chair', 'table', 'lamp'] as const;
    type Furniture = typeof furniture[number];
    

    More about the new const contexts is found in this PR as well as in the release notes.

提交回复
热议问题