为什么字符串联合类型不能与变量一起使用?

时间:2017-07-30 15:17:13

标签: typescript

我正在尝试使用类型别名作为3种不同字符串的联合类型。

当我将类型设置为字符串文字时,这是有效的,但是当我尝试使用变量时则不行。

// store strings in constants
const EDIT_STATE = 'EDIT_STATE';
const EDITING_SUBMIT = 'EDITING_SUBMIT';
const EDITING_COMPLETE = 'EDITING_COMPLETE';

// this works, but means I'm repeating the literals twice
type UiState1 = 'EDIT_STATE' | 'EDITING_SUBMIT' | 'EDITING_COMPLETE';

// this is what I'm trying to do, but throws error "Cannot find name 'EDIT_STATE'"
type UiState2 = EDIT_STATE | EDITING_SUBMIT | EDITING_COMPLETE;

为什么联合类型不能与变量一起使用?

1 个答案:

答案 0 :(得分:1)

那是因为您尝试使用某个类型的值 您有两种选择:

(1)为您的值创建类型:

const EDIT_STATE = 'EDIT_STATE';
type EDIT_STATE = "EDIT_STATE";

const EDITING_SUBMIT = 'EDITING_SUBMIT';
type EDITING_SUBMIT = "EDITING_SUBMIT";

const EDITING_COMPLETE = 'EDITING_COMPLETE';
type EDITING_COMPLETE = "EDITING_COMPLETE";

(请注意,您可以对值和类型使用相同的名称)

(2)您可以使用typeof

type UiState2 = typeof EDIT_STATE | typeof EDITING_SUBMIT | typeof EDITING_COMPLETE;

您可以在此处阅读有关此类型/值问题的更多信息:Declaration Merging - Basic Concepts