关于typescript的面试题,把某个属性变成可选的类型定义

// 面试题, 请写一个type 使其把Todo 类型的description变成可选的
interface Todo {
  title: string;
  description: string;
  completed: boolean;
}

/**
 * 
 * 
 * interface Todo {
    title: string;
    description?: string;  // 这里变成可选的
    completed: boolean;
  }
 * 
 */

type ToParitalDes<T extends Todo> = Pick<T, Exclude<keyof T, "description">> & Pick<T, "description">
// 升级版本
type ToParitalDes2<T extends Todo, U extends keyof T> = Pick<T, Exclude<keyof T, U>> & Pick<T, U>;


const todo: ToParitalDes<Todo> = {
  title: "Clean room",
  completed: false,
  description: "",
};

const todo2: ToParitalDes2<Todo, "description"> = {
  title: "Clean room",
  completed: false,
  description :''
};

总结:

搞了一下午,差了一部分文档,比葫芦画瓢写出来了, 感觉ts是另一种语言;

Pick是从对象抽出来某些属性类型, 用先抽,然后再合的方法, 完成一个类型的可选,当然也可以拓展成多个key的扩展

### 回答1: 1. TypeScript 是什么?为什么要使用它? TypeScript是一种由微软开发的开源编程语言,它是JavaScript的一个超集,增加了静态类型、类、接口、命名空间、泛型等特性。使用TypeScript可以提高代码的可维护性和可读性,并且可以减少类型错误,加强代码的稳定性。 2. TypeScript 中的接口是什么?如何使用接口? TypeScript中的接口是一种抽象的数据类型,它描述对象的行为和结构。使用接口可以规范代码,使得代码更加可读可维护。定义一个接口可以使用interface关键字,如下所示: ``` interface Person { name: string; age: number; sayHello(): void; } ``` 3. TypeScript 中的类是什么?如何使用类? TypeScript中的类是一种面向对象的编程概念,它是一个模板或者蓝图,用来创建对象的。使用类可以将相关的数据和行为封装在一起,提高代码的可读性和可维护性。定义一个类可以使用class关键字,如下所示: ``` class Person { name: string; age: number; constructor(name: string, age: number) { this.name = name; this.age = age; } sayHello() { console.log(`Hello, my name is ${this.name}, I'm ${this.age} years old.`); } } ``` 4. TypeScript 中的泛型是什么?如何使用泛型? TypeScript中的泛型是一种抽象的数据类型,它可以用来描述不同类型之间的关系。使用泛型可以提高代码的复用性和可读性,减少类型错误。定义一个泛型可以使用<>符号,如下所示: ``` function identity<T>(arg: T): T { return arg; } ``` 5. TypeScript 中的声明文件是什么?如何使用声明文件? TypeScript中的声明文件是一种特殊的文件,用来描述已有的JavaScript代码库的类型信息。使用声明文件可以将已有的JavaScript代码库引入到TypeScript项目中,并且可以获得类型检查和代码提示。声明文件的后缀名一般为".d.ts",例如jQuery的声明文件为"jquery.d.ts"。使用声明文件可以使用三斜线指令或者使用import语句,如下所示: ``` /// <reference path="jquery.d.ts" /> import * as $ from "jquery"; ``` 以上是一些常见的TypeScript面试题,希望能对你有所帮助。 ### 回答2: TypeScript是一种开源的面向对象编程语言,它是JavaScript的一个超集,由Microsoft发布。下面我将回答一些与TypeScript相关的面试题。 1. TypeScript有哪些优势? TypeScript相比JavaScript具有更严格的类型检查、更好的代码提示和自动完成、更好的可读性和可维护性,以及更好的工具支持。此外,TypeScript还支持最新的ECMAScript标准,并且能够编译为可在任何浏览器中运行的JavaScript代码。 2. TypeScript中的数据类型有哪些? TypeScript中有基本类型(如number、boolean、string、null、undefined等),以及对象类型(如object、array、function等)。此外,TypeScript还支持自定义类型。 3. 如何定义一个类并创建其实例? 可以使用class关键字定义一个类,然后使用new关键字创建其实例。例如: ``` class Person { name: string; age: number; constructor(name: string, age: number) { this.name = name; this.age = age; } } let person = new Person("Alice", 25); ``` 4. 如何定义接口和使用接口定义对象类型? 可以使用interface关键字定义一个接口,并且可以使用接口来定义对象的类型。例如: ``` interface Point { x: number; y: number; } function printPoint(point: Point) { console.log("x:", point.x); console.log("y:", point.y); } let point = { x: 10, y: 20 }; printPoint(point); ``` 5. 如何使用泛型? 在TypeScript中,可以使用泛型来增加代码的灵活性。例如: ``` function identity<T>(arg: T): T { return arg; } let output = identity<string>("Hello"); console.log(output); ``` 以上是对一些TypeScript面试题的简短回答,希望对您有所帮助。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值