TypeScript 语言 实战项目 任务管理系统开发

TypeScriptamuwap 发布于 1 天前 1 次阅读


TypeScript【1】实战项目:任务管理系统【2】的开发

随着互联网技术的飞速发展,任务管理系统已经成为许多企业和团队提高工作效率的重要工具。TypeScript作为一种JavaScript的超集,提供了类型系统、接口、模块等特性,使得代码更加健壮和易于维护。本文将围绕TypeScript语言,实战开发一个简单的任务管理系统。

项目背景

任务管理系统的主要功能包括:

1. 任务创建:用户可以创建新的任务,并设置任务的标题、描述、优先级等属性。
2. 任务列表:展示所有任务的列表,包括任务的基本信息。
3. 任务编辑:用户可以编辑已创建的任务,修改任务的属性。
4. 任务删除:用户可以删除不再需要的任务。
5. 任务筛选:根据任务的状态、优先级等条件筛选任务。

技术选型

为了实现上述功能,我们选择以下技术栈:

1. TypeScript:用于编写类型安全的JavaScript代码。
2. React【3】:用于构建用户界面。
3. Redux【4】:用于管理应用状态。
4. Ant Design【5】:用于快速搭建UI组件【6】

项目结构【7】

以下是项目的基本目录结构:


src/
|-- components/
| |-- TaskList.tsx
| |-- TaskItem.tsx
| |-- TaskForm.tsx
|-- actions/
| |-- taskActions.ts
|-- reducers/
| |-- taskReducer.ts
|-- store/
| |-- index.ts
|-- App.tsx
|-- index.tsx

实战开发

1. 创建项目【8】

使用`create-react-app`创建一个新的React项目,并安装【9】TypeScript支持:

bash
npx create-react-app task-manager --template typescript
cd task-manager
npm install antd

2. 安装Redux和React-Redux

安装Redux和React-Redux库,用于管理应用状态:

bash
npm install redux react-redux

3. 创建任务模型【10】

在`src/models`目录下创建`Task.ts`文件,定义任务模型:

typescript
// src/models/Task.ts
export interface Task {
id: number;
title: string;
description: string;
priority: 'low' | 'medium' | 'high';
status: 'todo' | 'in-progress' | 'done';
}

4. 创建任务列表组件

在`src/components/TaskList.tsx`文件中,创建任务列表组件:

typescript
// src/components/TaskList.tsx
import React from 'react';
import { useSelector, useDispatch } from 'react-redux';
import { Task } from '../models/Task';
import TaskItem from './TaskItem';

const TaskList: React.FC = () => {
const tasks: Task[] = useSelector((state: any) => state.tasks);
const dispatch = useDispatch();

return (

{tasks.map((task: Task) => (

))}

);
};

export default TaskList;

5. 创建任务项组件

在`src/components/TaskItem.tsx`文件中,创建任务项组件:

typescript
// src/components/TaskItem.tsx
import React from 'react';
import { Task } from '../../models/Task';

const TaskItem: React.FC = ({ task }) => {
return (

{task.title}

{task.description}

Priority: {task.priority}

Status: {task.status}

);
};

export default TaskItem;

6. 创建任务表单组件

在`src/components/TaskForm.tsx`文件中,创建任务表单组件:

typescript
// src/components/TaskForm.tsx
import React, { useState } from 'react';
import { useDispatch } from 'react-redux';
import { Task } from '../../models/Task';
import { addTask } from '../../actions/taskActions';

const TaskForm: React.FC = () => {
const [title, setTitle] = useState('');
const [description, setDescription] = useState('');
const [priority, setPriority] = useState('low');
const [status, setStatus] = useState('todo');
const dispatch = useDispatch();

const handleSubmit = (e: React.FormEvent) => {
e.preventDefault();
const newTask: Task = {
id: Date.now(),
title,
description,
priority,
status,
};
dispatch(addTask(newTask));
setTitle('');
setDescription('');
setPriority('low');
setStatus('todo');
};

return (

setTitle(e.target.value)}
placeholder="Title"
/>
setDescription(e.target.value)}
placeholder="Description"
/>
setPriority(e.target.value as Task['priority'])}
>
Low
Medium
High

setStatus(e.target.value as Task['status'])}
>
Todo
In Progress
Done

Add Task

);
};

export default TaskForm;

7. 创建任务动作【11】

在`src/actions/taskActions.ts`文件中,创建任务动作:

typescript
// src/actions/taskActions.ts
import { Task } from '../../models/Task';

export const addTask = (task: Task) => ({
type: 'ADD_TASK',
payload: task,
});

8. 创建任务还原器【12】

在`src/reducers/taskReducer.ts`文件中,创建任务还原器:

typescript
// src/reducers/taskReducer.ts
import { Task } from '../../models/Task';
import { ADD_TASK } from '../actions/taskActions';

const initialState: Task[] = [];

const taskReducer = (state = initialState, action: any) => {
switch (action.type) {
case ADD_TASK:
return [...state, action.payload];
default:
return state;
}
};

export default taskReducer;

9. 创建Redux存储

在`src/store/index.ts`文件中,创建Redux存储:

typescript
// src/store/index.ts
import { createStore } from 'redux';
import { taskReducer } from '../reducers/taskReducer';

const store = createStore(taskReducer);

export default store;

10. 创建应用组件

在`src/App.tsx`文件中,创建应用组件:

typescript
// src/App.tsx
import React from 'react';
import { Provider } from 'react-redux';
import store from './store';
import TaskList from './components/TaskList';
import TaskForm from './components/TaskForm';

const App: React.FC = () => {
return (

Task Manager