返回

步步高升:TypeScript 每日挑战等你来战!

前端

相信很多 JavaScript 开发者都会使用 TypeScript 来编写代码,但你真的了解 TypeScript 吗?你的 TypeScript 技能到底到了什么水平?
如果你还不确定自己的 TypeScript 水平,那就快来参加 TypeScript 每日挑战吧!TypeScript 每日挑战是一个线上平台,为 TypeScript 开发者提供每日编程挑战。这些挑战涵盖了各种 TypeScript 主题,从基础语法到高级特性,应有尽有。

通过参加 TypeScript 每日挑战,你可以:

  • 巩固你的 TypeScript 基础知识,查漏补缺。
  • 掌握 TypeScript 的新特性和新用法。
  • 提高你的 TypeScript 编码能力。
  • 与其他 TypeScript 开发者交流心得,共同进步。

今日题目:
有一个名为 DocType 的接口,包含一组必填字段和一组可选字段。我们希望编写一个函数,该函数可以将一个对象转换为 DocType 类型。
如果该对象中包含所有必填字段,则返回一个 DocType 类型的对象。
否则,抛出错误。
例如:

const docType: DocType = {
  name: 'John Doe',
  age: 30,
};

const obj = {
  name: 'John Doe',
  age: 30,
  city: 'New York',
};

const result = convertObjToDocType(obj);
console.log(result); // { name: 'John Doe', age: 30 }

现在,让我们一起来解决这个问题吧!

解答:

interface DocType {
  name: string;
  age: number;
  city?: string;
}

function convertObjToDocType(obj: any): DocType {
  const requiredFields = ['name', 'age'];
  for (const field of requiredFields) {
    if (!obj.hasOwnProperty(field)) {
      throw new Error(`Missing required field: ${field}`);
    }
  }

  return {
    name: obj.name,
    age: obj.age,
    city: obj.city,
  };
}