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,
}