typescript笔记

107 阅读2分钟

1、接口interface与类别别名tye都可以用于定义对象或者函数类型:
区别:
a、interface可以被实现implement和继承extend,而类名不行;
b、type可以用于联合类型 | 和交叉类型,而interface不行;
c、同一个作用域同名interface可以被合并,而type不行;
d、type用&符合可以组成新的对象类型,interface不行。

2、any类型与unknown类型区别:
any类型可以接受任意类型的值,而unknown类型只能赋值给任意类型和unknown类型本身。
使用unknown类型要比使用any类型更加安全,会强制开发人员在使用该值时先进行类型检查

3、keyof关键字在typeScript中的作用:
keyof关键字可以用来获取一个对象的所有键的联合类型,可以用于编写通用的函数和类型,用于操作和扩展对象的键。

4、一个类型的属性设置为readonly后怎么修改:
使用别名,

interface Person {
name: string;
age: number;
}

interface ReadonlyPerson {
readonly name: string;
readonly age: number;
}

let writablePerson: Person = {
name: 'PersonA',
age: 42,
}

let readonlyPerson: ReadonlyPerson = writablePerson;
console.log(readonlyPerson.age);
writablePerson.age++;
console.log(readonlyPerson.age);

5、如何将一个类型的属性修改为可选属性:

使用工具类Partial

type User = {
name: string
age: number
dept: string
}

type PartialUser = Partial<User>

// PartialUser的结果如下
type PartialUser = {
    name?: string | undefined
    age?: number | undefined
    dept?: string | undefined
}

6、如果将一个类型的属性全部变成必选参数:

使用工具类Required

type InfoPerson = {
    name: string
    age: number
    address?: string
    like?: string[]
 }
 
 // 通过Required将可选字段变为必须字段</br>
 const lisi: Required<InfoPerson> = {
   name: '李四',
   age: 20,
   address: '在梦里',
   like: ['吃饭', '睡觉']
 }

 // 通过Required将可选字段变为了必须字段</br>
 // 这个会报错Type '{ name: string; age: number; }' is missing the following properties from type 'Required<InfoPerson>': address, like(2739)</br>
 const zhangsan: Required<InfoPerson> = {
   name: '张三',
   age: 40,
 }