将typescript字符串文字类型转换为字符串数组

时间:2017-08-11 03:41:07

标签: javascript typescript

我有

type ImageVerticalSpacing = 'ignoreBottom' | 'ignoreTop' | 'ignoreBoth' 
| 'Default';

在typescript中,需要将这些字符串作为字符串数组传递给下拉列表。 如何将ImageVerticalSpacing类型转换为字符串数组?

1 个答案:

答案 0 :(得分:3)

您无法在运行时将TypeScript中的类型转换为值。但您可以反过来:创建一个运行时对象并让TypeScript推断其类型。

用于此目的的理想运行时对象是tuple。不幸的是,TypeScript本身并不能很好地推断元组。我使用一个名为tuple()的辅助函数来返回元组类型。

更新:2018-12,自TypeScript 3.0以来tuple()函数可以这样写:

type Narrowable = string | number | boolean | symbol | 
  object | {} | void | null | undefined;
const tuple = <T extends Narrowable[]>(...args: T)=>args;

使用上面的辅助函数,您可以这样做:

const imageVerticalSpacing = tuple('ignoreBottom','ignoreTop','ignoreBoth','Default');

type ImageVerticalSpacing = (typeof imageVerticalSpacing)[number];

imageVerticalSpacing对象是一个可用于下拉列表的字符串数组,类型为['ignoreBottom','ignoreTop','ignoreBoth','Default']。类型ImageVerticalSpacing与您声明的'ignoreBottom' | 'ignoreTop' | 'ignoreBoth' | 'Default'相同。

(在The Playground上查看)

希望有所帮助。祝你好运!