Ts 使用总结/可用于面试

本文详细探讨了TypeScript中interface与type的主要区别和共同点。区别包括接口合并、类型声明的支持以及映射类型的使用。相同点在于它们都能描述对象和函数,并且可以相互扩展属性。此外,文章还介绍了TypeScript类的特性,如封装、继承、多态,以及类在实际应用中的场景,如在React组件中的使用。
摘要由CSDN通过智能技术生成

typescript中interface与type的区别

1. interface可以合并同名接口,type不可以
 interface Person {
     name:String
 }
 interface Person {
     age: Number
 }
 const person: Person = {name:'zs',age:12}
2. type支持的声明格式,interface不支持

类型别名可以用于其它类型 (联合类型、元组类型、基本类型(原始值)),interface不支持,接口只能表示function,object, class类型

type PersonName = {name:string}
type PersonAge = {age:number}// union(联合)
type person = PersonName|PersonAge;//tuple(元祖)
type Data = [PersonName,PersonAge]//primitive(原始值)
type age = number;// tyoeof的返回值
let age = 12
type name = typeof age;
3.type支持能使用in关键字生成映射类型,interface不支持
type Keys = 'firstname' | 'surname';type DudeType = {
    [key in Keys] :string; //映射每个参数
};const test: DudeType = {
    firstname: 'zhang',
    surname: 'san'
}

typescript中interface与type的相同点

1.都可以描述一个对象或者函数

interface

interface People {
    name: string
    age: number
}
interface setPeople {
    (name:string,age:number):void
}
type

type People = {
    name: string
    age: number
};
type setPeople = (name:string,age:12)=>void;

2.都允许相互拓展属性,但是语法不同

interface extends interface 关键词:extends

interface Name {
    name:string;
}
interface People extends Name {
    age:number;
}
interface extends type 关键词:extends

type Name = {
    name:string;
}
type People = Name & {age:number}
type extends type 关键词:&

type Name = {
    name:string;
}
type People = Name & {age:number}
type extends interface 关键词:&

interface Name = {
    name:string;
}
type People = Name & {age:number}

总结

interface 可以继承 interface , 继承type, 使用extends关键字。type也可以继承type,也可以继承interface,使用 &

只要是interface扩展属性无论是interface还是type都使用关键字extends;type的扩展属性无论是type还是interface都是使用关键字&

你如何理解Typescript中的类?列出类的一些特性

TypeScript是一种面向对象的语言,支持OOP(面向对象编程)三大特性:封装继承多态。TypeScript的类是一组具有公共属性的对象,是创建对象的模板。“class”关键字声明一个类。Typescript的类除了实现所有ES6中的类的功能,还添加类一些新的用法。

其特性如下:

封装:

将对数据的操作细节隐藏起来,只暴露对外的接口。

继承:

子类除了拥有父类的所有特性外,还有一些更具体的特性。

多态:

由继承而产生了相关的不同的类,对同一个方法可以有不同的响应。

存取器:

用以改变属性的读取和赋值行为。

抽象类:

抽象类是供其他类继承的基类,抽象类不允许被实例化。

修饰符:

是一些关键字,用于限定成员或类型的性质。

接口:

不同类之间公有的属性或方法,可以抽象成一个接口。

应用场景

除了日常借助类的特性完成日常业务代码,还可以将类(class)也可以作为接口,尤其在 React 工程中是很常用的,

如下:

export default class Carousel extends React.Component<Props, State> {}

由于组件需要传入 props 的类型 Props ,同时有需要设置默认 props 即 defaultProps,这时候更加适合使用class作为接口

先声明一个类,这个类包含组件 props 所需的类型和初始值:

// props的类型
export default class Props {
  public children: Array<React.ReactElement<any>> | React.ReactElement<any> | never[] = []
  public speed: number = 500
  public height: number = 160
  public animation: string = 'easeInOutQuad'
  public isAuto: boolean = true
  public autoPlayInterval: number = 4500
  public afterChange: () => {}
  public beforeChange: () => {}
  public selesctedColor: string
  public showDots: boolean = true
}

当我们需要传入 props 类型的时候直接将 Props 作为接口传入,此时 Props 的作用就是接口,而当需要我们设置defaultProps初始值的时候,我们只需要:

public static defaultProps = new Props()

Props 的实例就是 defaultProps 的初始值,这就是 class作为接口的实际应用,我们用一个 class 起到了接口和设置初始值两个作用,方便统一管理,减少了代码量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

织_网

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值