我正在尝试使用类型别名作为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;
为什么联合类型不能与变量一起使用?
答案 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