TS 之接口和泛型

最近项目需要使用ts,那么接口和泛型是一定需要了解的,今天他们两个的特性总结一波

接口

接口是定义对象一个对象的结构,定义一个对象中应该包含哪些属性和方法。

1.怎么定义?

使用关键字interface定义,看代码

interface cat {

  name:string

  age:number

}

const per:cat = {

  name: 'xiaoming',

  age: 18,

  // sex: '男', //报错,sex没有在cat中定义,接口未写的属性不可以定义

}

接口也可以同类型声明使用,这点和type是一样的,看代码

type typeCat= {

  name:string,

  age: number

}

const per:typeCat = { 自定义的属性和方法...}

不过type声明不可以重复,这点和let const是相同的 ,接口interface可以声明两次,结果是两个接口的属性方法的合并

interface cat {

  name:string

  age:number

}

interface cat {

  sex:string

}
//等价于
interface cat {

  name:string

  age:number

  sex:string

}
//如果第二个声明或者第n个声明中,有之前声明过的属性,则属性类型必须一致

泛型

定义:在定义函数或类时,遇到类型不明确的,可以使用泛型,泛型就是一个不确定的类型,调用时传入具体类型,看代码

function fn<T>(uncertain: T): T{ 

    return uncertain

}

比如说fn(10),那么传入的参数类型就是number,即T的类型被推断为number类型,还有一种写法

fn<string>("cat"),指定传入的参数是string类型

上面只是指定了一个泛型,你也可以指定多个泛型,看代码

function fn<T, U>(a:T, b:U):T{

  return a

}

调用方法是一样的,比如说fn(10,"cat")或者指定类型fn<number,string>(10,"cat")

扫描二维码关注公众号,回复: 16335949 查看本文章

泛型范围的限制

T extends interface表示泛型T 必须是interface的子类,看代码


interface strlength{

  length: number

}

function fn<T extends strlength>(a:T):number{

  return a.length

}

fn('cat')

 解释一下(从左到右),定义函数,指定其传入的参数必须含有其定义的属性,后边的number是函数输出的类型,当我们传入'cat',函数fn就会输出cat的字符串的长度。

猜你喜欢

转载自blog.csdn.net/qq_45662523/article/details/126632861