【问题标题】:useReducer typescript: State TypeuseReducer 打字稿:状态类型
【发布时间】:2021-05-11 04:15:54
【问题描述】:
在实现reducer时如何做状态类型?我有属性和功能。
export interface State {
form: boolean;
errorForm: boolean;
projects: ProjectI[];
project: ProjectI;
showFormFn(): void;
getProjectsFn(): void;
addProjectFn(project: ProjectI): void;
showErrorFn(): void;
currentProjectFn(projectId: string): void;
deleteProjectFn(projectId: string): void;
}
但是我在使用钩子并尝试初始化状态时遇到了问题。正确的实施方式是什么?
【问题讨论】:
标签:
typescript
react-hooks
react-typescript
【解决方案1】:
这是一种以经典方式实现它的方法:
interface ProjectI {
id: string;
}
export interface State {
form: boolean;
errorForm: boolean;
projects: ProjectI[];
project: ProjectI;
showFormFn(): void;
getProjectsFn(): void;
addProjectFn(project: ProjectI): void;
showErrorFn(): void;
currentProjectFn(projectId: string): void;
deleteProjectFn(projectId: string): void;
}
type Actions = { type: 'addProject', payload: ProjectI } | { type: 'setProject', payload: ProjectI } | { type: 'error' }
function reducer(state: State, action: Actions) {
switch (action.type) {
case 'addProject':
return { ...state, projects: state.projects.concat(action.payload) };
case 'setProject':
return { ...state, project: action.payload };
case 'error':
return { ...state, errorForm: true };
default:
return state;
}
}
TS Playground 显示 typescript 中存在的类型。