您好,欢迎来到伴沃教育。
搜索
您的当前位置:首页Typescript基础语法2--interface

Typescript基础语法2--interface

来源:伴沃教育

我们在之前讲过给变量进行类型声明,Typescript会对值所具有的结构进行类型检查。在Typescript里,接口的作用就是为这些类型命名和为你的代码或第三方代码定义契约。
之前,我们讲过给一个变量声明对象类型是这样的:

var obj : {name : string}

但是有了接口后,我们可以

interface dabao {
       name : string;
       age : num
}
var obj : dabao = {
      name : 'cxh',
      age : 12;
}

上面接口描述对象必须包含一个string类型的name属性以及一个number类型的age属性。
可选属性
接口里的属性不全都是必需的。 有些是只在某些条件下存在,或者根本不存在

interface dabao {
      name : string;
      age ?: number;
}
var obj : dabao = {
     name : 'cxh'
}

只读属性
一些对象属性只能在对象刚刚创建的时候修改其值。 你可以在属性名前用 readonly来指定只读属性:

interface dabao {
      readonly  name : string;
      readonly age : number;
}
var obj : dabao = {
      name : 'cxh'
}
obj.name = 'xiaobao' //error

ReadonlyArray<T>
ReadonlyArray<T>类型与Array<T>相似,只是把所有可变方法去掉了,因此可以确保数组创建后再也不能被修改:

let  dabao  :  ReadonlyArray<number>  = [1,2,3];
let  dabao[2] = 3 //error
let  dabao.length = 10 //error

属性检查
假如我们传入

interface dabao {
    name ?: string;
    age ?: number
}

目的是得到可选name和age属性的对象,但是当我们定义多余的属性时,typescript会进行多余的检查,例如:

interface dabao {
    name ?: string;
    age ?: number;
}

let obj : dabao = {
    name : 'cxh';
    height : 180
} 
//error  'height ' not expected in type 'dabao' 

如果想要绕开检查,有两种方式:
第一

let  obj   =  <dabao>{
      name : 'cxh',
      height :180
}

第二

interface dabao {
    name ?: string;
    age ?: number;
    [propName: string] : any;
}
let obj : dabao = {
      name : 'cxh',
      height : 180
}

函数类型

interface dabao {
      (name : string,age : number) : boolean
}
var fnc : dabao = function(name : string,age:number) : boolean{
      return true
}

可索引的类型
可索引类型具有一个 索引签名,它描述了对象索引的类型,还有相应的索引返回值类型。 让我们看一个例子:

interface dabao {
      [index:number] : string
}
let array: dabao;
array  = ['cxh','ccc'];

上面例子里,我们定义了dabao接口,它具有索引签名。 这个索引签名表示了当用 number去索引dabao时会得到string类型的返回值。
共有支持两种索引签名:字符串和数字。 可以同时使用两种类型的索引,但是数字索引的返回值必须是字符串索引返回值类型的子类型。 这是因为当使用 number来索引时,JavaScript会将它转换成string然后再去索引对象。
例如:

interface dabao{
  [index: string]: number;
  length: number;    // 可以,length是number类型
  name: string         // 错误,`name`的类型与索引类型返回值的类型不匹配
}

类实现接口

interface  dabao {
      setName (n: string)
}

class Dabao implements dabao {
      name : string;
      setTime(n : string) {
              this.name = n
      }
}

接口描述了类的公共部分,而不是公共和私有两部分。 它不会帮你检查类是否具有某些私有成员。

接口继承接口

interface xiaobao {
      name : string;
}
interface dabao extends xiaobao {
      age : number;
}

let obj = <dabao>{
      name : 'cxh',
      age : 18,
      height : 180
}  
console.log(obj)
Paste_Image.png
混合类型
interface dabao {
      setName(n : string);
      age : number;
      (height : number) : string;
}
var obj : dabao;
console.log(obj = <dabao>function(height){ return '1'+height})
console.log(obj.age = 12)
console.log(obj.setName = function(name:string) : string{return 'nihao'})
Paste_Image.png
接口继承类
class Control {
    private state : any;
}
interface SelectableControl extends Control {
    select(): string;
}
class Button  implements SelectableControl{

}
Paste_Image.png
class Control {
    private state : any;
}
interface SelectableControl extends Control {
    select(): string;
}
class Button  implements SelectableControl{
       select(): string {return ''}
}
Paste_Image.png

Copyright © 2019- bangwoyixia.com 版权所有 湘ICP备2023022004号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务