【TS基础】数据类型及特性讲解—接口

数据类型

JS 七种类型 + 枚举 + any + void + never

1、 枚举(enum)
可以这样理解,你要给Gender赋值"man"或"woman"(因为性别只能有这两种),但是你手抖打成了"men",但是系统却不知道你打错了,所以这时,我们就用枚举,把有限的属性放进枚举里,你的值只能从枚举里来取;

enum Gender {
  Man = 'man',
  Woman = 'woman',
}

let gender: Gender = Gender.Man
console.log(gender);
gender = Gender.Woman;
console.log(gender);

null和undefined可以赋给任意类型的值,在ts里,null和undefined没有任何区别;let a: number = null

  • js特别喜欢悄悄地转换类型,但ts特别讨厌悄悄地转换类型;
  • 执行一行代码需要多长时间呢?差不多是ns级的(10的-9次方秒);看下图,执行一万次for循环,仅需要0.2ms;
    image.png

接口

  • C#和ts的编写者是同一个人(海尔斯伯格),所以ts很多地方都和C#很像;
先看一个问题,请问函数和方法有什么区别?

答: 当一个函数是一个对象的属性时,我们称这个函数是该对象的方法;

1、基础定义
  • 接口就是用代码描述一个对象必须有什么属性(包括方法),但是有没有其他属性就不管了。
  • 声明变量使用接口的时候,变量参数必须和接口中的参数一致,不能多也不能少;
  • interface中的每个属性用";"结尾;
   interface Human{
        name: string;
        age: number;
    }
    let winwin: Human = {name: 'winwin', age: 1}
2、只读属性readonly
interface Human{
        readonly name: string;
        age: number;
    }
    let winwin: Human = {name: 'winwin', age: 18}
    winwin.name = 'lucas'  //这句话就是错的,因为name是只读属性,不可对它再次写入;
3、可选属性
  • 如果有些参数不是必须要定义的,就用?:,即name?: string,那么name就是可写可不写的;
4、有一个属性是函数
interface Human{
    name: string;
    age: number;
    add(a:number, b:number): number;   //这个属性是函数
}
5、那如果这个对象本身是函数怎么办
  • 不写名字的函数属性,就是对象本身
interface SearchFunc {
    (source: string, subString: string): boolean;    
}
6、如果这个对象是个函数,而且这个对象的属性也是一个函数该怎么写呢?
  • 没有名字的函数是对象本身的函数,有名字的函数是这个对象的属性;
interface 二则运算 {
    (a: number, b: number): number;
    逆运算(a: number, b: number): number;
}
let fn = (): 二则运算 => {
    let x: any = function(a: number, b: number): number {
        return a + b;
    };

    x.逆运算 = function(a: number, b: number): number {
        return a - b;
    };
    return x;
}

let add: 二则运算 = fn();
console.log(add(1, 2));   //3
console.log(add.逆运算(2,1));  //1
7、这个对象是数组怎么办
   interface StringArray {
        [index: number]: string;
    }
    
    let myArray: StringArray = ["Bob", "Fred"]
    
    let myStr: string = myArray[0];
8、继承
  • 一个interface可以继承多个interface
  • 一个interface还可以继承一个继承了interface的接口
interface Shape {
        color: string;
    }
    interface fill {
        filled: boolean
    }
    interface Square extends Shape,fill {
        sideLength: number;
    }
    
    let square: Square = {
        color: "red",
        sideLength: 20,
        filled: false
    }

测试题

test.png
   interface A {
        num: number;
        b: boolean;
        str: string;
        optional?: string;
        add(n1: number, n2:number): number;
        readonly r: string;
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容