You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用TypeScript函数式风格实现指定OO汽车启动设计?

TypeScript函数式实现汽车启动设计方案

1. 定义通用汽车类型契约

用TypeScript接口描述通用汽车的核心能力,对应原OOP中的Car类型:

interface Car {
  start(): void;
  // 可扩展其他通用汽车方法
}

2. 手动变速箱汽车的函数式实现

通过高阶函数封装固定启动流程,将钩子方法作为参数传入,同时提供默认实现支持复用或重写:

2.1 定义钩子方法类型

type ManualCarHooks = {
  pressClutch: () => void;
  checkGearPosition: () => void;
  // 允许重写的默认方法
  turnIgnitionKey?: () => void;
};

2.2 封装固定启动流程的高阶函数

// 生成手动变速箱汽车start方法的高阶函数
const createManualCarStart = (hooks: ManualCarHooks): () => void => {
  // 默认点火实现
  const defaultTurnIgnitionKey = () => {
    console.log("转动点火钥匙");
  };

  // 解构钩子,优先使用传入方法,无则用默认实现
  const { pressClutch, checkGearPosition, turnIgnitionKey = defaultTurnIgnitionKey } = hooks;

  // 固定启动流程
  return () => {
    pressClutch();
    checkGearPosition();
    turnIgnitionKey();
    console.log("手动变速箱汽车启动完成");
  };
};

2.3 创建具体手动变速箱实例

// 基础手动挡汽车
const basicManualCar: Car = {
  start: createManualCarStart({
    pressClutch: () => console.log("踩下离合器"),
    checkGearPosition: () => console.log("检查档位在空挡"),
    // 复用默认点火方法
  }),
};

// 重写点火逻辑的手动挡汽车
const customManualCar: Car = {
  start: createManualCarStart({
    pressClutch: () => console.log("用力踩下离合器"),
    checkGearPosition: () => console.log("确认档位处于空挡或驻车挡"),
    turnIgnitionKey: () => console.log("按下一键启动按钮"),
  }),
};

3. 其他车型的自由实现

直接实现Car接口即可,无需依赖固定模板:

// 自动挡汽车
const automaticCar: Car = {
  start: () => {
    console.log("踩下刹车");
    console.log("按下一键启动");
    console.log("自动挡汽车启动完成");
  },
};

// 新能源汽车
const electricCar: Car = {
  start: () => {
    console.log("踩下刹车");
    console.log("按下启动按钮");
    console.log("检查电池电量");
    console.log("新能源汽车启动完成");
  },
};

4. 使用示例

basicManualCar.start();
customManualCar.start();
automaticCar.start();
electricCar.start();

内容的提问来源于stack exchange,提问作者zzheng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 19:27:09