Const变量作为type-Typescript
在学习打字脚本的过程中,我遇到了一个问题,当我使用带有动作值的常量变量时,我使用它来减少(创建该变量是为了防止打字错误——我在某个地方读到过这是一个很好的实践) 我还创建了用于定义减速器动作的类型:Const变量作为type-Typescript,typescript,react-native,types,constants,reducers,Typescript,React Native,Types,Constants,Reducers,在学习打字脚本的过程中,我遇到了一个问题,当我使用带有动作值的常量变量时,我使用它来减少(创建该变量是为了防止打字错误——我在某个地方读到过这是一个很好的实践) 我还创建了用于定义减速器动作的类型: type InputReducerAction = | { type: INPUT_CHANGE; value: string; isValid: boolean } | { type: INPUT_BLUR }; 这是我的减速机: const inputReducer = (state:
type InputReducerAction =
| { type: INPUT_CHANGE; value: string; isValid: boolean }
| { type: INPUT_BLUR };
这是我的减速机:
const inputReducer = (state: InputReducerState, action: InputReducerAction) => {
switch (action.type) {
case INPUT_CHANGE:
return {
...state,
value: action.value,
isValid: action.isValid,
};
case INPUT_BLUR:
return {
...state,
touched: true,
};
default:
return state;
}
};
当我在inputEducationAction
中有上面的INPUT\u CHANGE
和INPUT\u BLUR
这样的所有链接时,都标记为错误:
“INPUT_CHANGE”指的是一个值,但在此处用作类型。你的意思是“输入类型变化”吗?ts(2749)
“INPUT_BLUR”指的是一个值,但在此处用作类型。你是说“输入类型模糊”吗?ts(2749)
当我对这个常量使用双引号时,问题就消失了,就像这样
type InputReducerAction =
| { type: "INPUT_CHANGE"; value: string; isValid: boolean }
| { type: "INPUT_BLUR" };
但是我的常量变量现在是无用的。我做错了什么或错过了什么
在写这个问题的过程中,我想到了使用enum:
enum INPUT_ACTION {
INPUT_CHANGE = "INPUT_CHANGE",
INPUT_BLUR = "INPUT_BLUR"
}
type InputReducerAction =
| { type: INPUT_ACTION.INPUT_CHANGE; value: string; isValid: boolean }
| { type: INPUT_ACTION.INPUT_BLUR };
const inputReducer = (state: InputReducerState, action: InputReducerAction) => {
switch (action.type) {
case INPUT_ACTION.INPUT_CHANGE:
return {
...state,
value: action.value,
isValid: action.isValid,
};
case INPUT_ACTION.INPUT_BLUR:
return {
...state,
touched: true,
};
default:
return state;
}
};
并将其应用于减速器和类型中。错误会消失,但这是一个好主意还是我可以用更好的方式来做这件事您可以用它来做您所描述的事情
const INPUT\u CHANGE=“INPUT\u CHANGE”作为常量;
const INPUT\u BLUR=“INPUT\u BLUR”作为常量;
输入型营养作用=
|{type:typeof INPUT_CHANGE;value:string;isValid:boolean}
|{type:typeof INPUT_BLUR};
const changeAction:inputEducationAction={
类型:输入\更改,值:“”,isValid:false
};
常量模糊操作:InputAction={
类型:输入模糊
};
问题是JavaScript变量只在运行时分配值,TypeScript需要在编译时知道。使用const断言是一种通知编译器其值不应更改的方法。当您获取变量的
类型时,请使用文本值,而不是通常分配给变量的泛型字符串类型。但是,我通常更喜欢使用枚举。特别是在我可能要枚举值的情况下。
enum INPUT_ACTION {
INPUT_CHANGE = "INPUT_CHANGE",
INPUT_BLUR = "INPUT_BLUR"
}
type InputReducerAction =
| { type: INPUT_ACTION.INPUT_CHANGE; value: string; isValid: boolean }
| { type: INPUT_ACTION.INPUT_BLUR };
const inputReducer = (state: InputReducerState, action: InputReducerAction) => {
switch (action.type) {
case INPUT_ACTION.INPUT_CHANGE:
return {
...state,
value: action.value,
isValid: action.isValid,
};
case INPUT_ACTION.INPUT_BLUR:
return {
...state,
touched: true,
};
default:
return state;
}
};