MST

星途 面试题库

面试题:TypeScript接口与类结合的复杂场景应用

假设有一个项目管理系统,有`Project`类和`Task`类,`Task`类包含任务名称、任务状态(枚举类型:待办、进行中、已完成)、所属项目等信息。请使用接口来约束`Task`类的结构,并实现`Project`类中添加任务、移除任务等方法。同时,利用接口和类的结合来确保任务添加到正确的项目中,并且在移除任务时处理相关的逻辑(例如任务状态变更等)。
36.5万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

以下是使用Java语言实现上述要求的代码示例:

  1. 定义任务状态枚举:
public enum TaskStatus {
    TODO, IN_PROGRESS, COMPLETED
}
  1. 定义任务接口:
public interface TaskInterface {
    String getTaskName();
    TaskStatus getTaskStatus();
    Project getProject();
    void setTaskStatus(TaskStatus status);
}
  1. 实现Task类:
public class Task implements TaskInterface {
    private String taskName;
    private TaskStatus taskStatus;
    private Project project;

    public Task(String taskName, TaskStatus taskStatus, Project project) {
        this.taskName = taskName;
        this.taskStatus = taskStatus;
        this.project = project;
    }

    @Override
    public String getTaskName() {
        return taskName;
    }

    @Override
    public TaskStatus getTaskStatus() {
        return taskStatus;
    }

    @Override
    public Project getProject() {
        return project;
    }

    @Override
    public void setTaskStatus(TaskStatus status) {
        this.taskStatus = status;
    }
}
  1. 实现Project类:
import java.util.ArrayList;
import java.util.List;

public class Project {
    private String projectName;
    private List<TaskInterface> tasks = new ArrayList<>();

    public Project(String projectName) {
        this.projectName = projectName;
    }

    public void addTask(TaskInterface task) {
        if (task.getProject() == this) {
            tasks.add(task);
        } else {
            throw new IllegalArgumentException("Task does not belong to this project");
        }
    }

    public void removeTask(TaskInterface task) {
        if (tasks.contains(task)) {
            tasks.remove(task);
            task.setTaskStatus(TaskStatus.COMPLETED); // 处理任务状态变更
        }
    }

    public List<TaskInterface> getTasks() {
        return tasks;
    }
}

你可以通过以下方式测试这些代码:

public class Main {
    public static void main(String[] args) {
        Project project = new Project("Sample Project");
        Task task = new Task("Task 1", TaskStatus.TODO, project);
        project.addTask(task);
        System.out.println("Tasks in project: " + project.getTasks().size());
        project.removeTask(task);
        System.out.println("Tasks in project after removal: " + project.getTasks().size());
    }
}

以上代码首先定义了任务状态的枚举类型,然后通过接口TaskInterface约束了Task类的结构。Task类实现了该接口,Project类实现了添加任务和移除任务的方法,并在移除任务时处理了任务状态变更的逻辑。在确保任务添加到正确项目时,通过检查任务所属项目是否与当前项目一致来实现。最后通过Main类进行简单测试。

若使用其他编程语言,实现思路类似,但语法会有所不同。例如在Python中,可通过抽象基类和抽象方法来实现类似接口的功能,以下是Python示例:

from abc import ABC, abstractmethod


class TaskStatus:
    TODO = "TODO"
    IN_PROGRESS = "IN_PROGRESS"
    COMPLETED = "COMPLETED"


class TaskInterface(ABC):
    @abstractmethod
    def get_task_name(self):
        pass

    @abstractmethod
    def get_task_status(self):
        pass

    @abstractmethod
    def get_project(self):
        pass

    @abstractmethod
    def set_task_status(self, status):
        pass


class Task(TaskInterface):
    def __init__(self, task_name, task_status, project):
        self.task_name = task_name
        self.task_status = task_status
        self.project = project

    def get_task_name(self):
        return self.task_name

    def get_task_status(self):
        return self.task_status

    def get_project(self):
        return self.project

    def set_task_status(self, status):
        self.task_status = status


class Project:
    def __init__(self, project_name):
        self.project_name = project_name
        self.tasks = []

    def add_task(self, task):
        if task.get_project() == self:
            self.tasks.append(task)
        else:
            raise ValueError("Task does not belong to this project")

    def remove_task(self, task):
        if task in self.tasks:
            self.tasks.remove(task)
            task.set_task_status(TaskStatus.COMPLETED)

    def get_tasks(self):
        return self.tasks


if __name__ == "__main__":
    project = Project("Sample Project")
    task = Task("Task 1", TaskStatus.TODO, project)
    project.add_task(task)
    print("Tasks in project:", len(project.get_tasks()))
    project.remove_task(task)
    print("Tasks in project after removal:", len(project.get_tasks()))

Python示例通过abc模块中的抽象基类和抽象方法来模拟接口功能,Task类继承抽象基类并实现抽象方法,Project类实现添加和移除任务的逻辑,并在移除任务时处理任务状态变更。最后在if __name__ == "__main__":块中进行测试。