typeScript的学习笔记1

基本类型

布尔值

Boolean: true / false

1
let isBoolean: boolean = false;

数值

ts中的数字跟js一样,都是浮点数,类型为number,二进制、十进制、十六进制等等

1
let num: number = 12;

字符串

文本语言,类型是string,可以用””双引号,也可以用’’单引号表示

1
2
let str1: string = 'test1';
let str2: string = "test2"

数组

类型array,ts中表达的方式如下:

1
2
3
4
5
6
// 方法一
let arr1: number[] = [1,2,3,4]
let arr2: string[] = ['1', '2', '3']

// 方法二
let arr3: Array<number> = [1,2,3]

元组

表示一个已知元素类型跟数量的数组,如果赋值跟定义的不一样就会报错

1
let arr: [number, string, boolean] = [1, 'a', false]

枚举

类型:enum,枚举提供给开发人员一个便利,就是在知道数值的情况下,通过数值去查询数值对应的名称

1
2
enum Color {Red = 1, Green = 2, Blue}
let colorName: string = Color[2]; // Green

Any

表示任意类型,在开发的时候,如果无法事先得知参数的类型,可以赋予Any

1
2
3
let anyTest: any = true;
anyTest = 1;
anyTest = 'test';

Object

object类型表示除了number、string、boolean、symbol、null或者undefined之外的类型

Void

表示没有类型,从某种角度来说,它跟any相反。如果要声明一个void类型,我们只能给它赋值null或者undefinde,而对于函数来说,没有返回的时候就是void

1
2
3
4
5
function test(): void {
this.a: number = 1;
}

let a: void = undefined;

某种说法下,类型的设置跟null还有undefined其实差不多

1
2
let a: null = null;
let b: undefined = undefined;

断言

表示预知的下一个实体具有比它现在类型更确切的类型

1
2
3
4
5
6
let b: any = "this is a duanyan";
// 方法一
let len: number = (b as string).length;

// 方法二
let len: number = (<string>b).length;

变量声明

  1. 通过var
  2. 通过let
  3. 通过const

    这里需要注意var有变量声明提升,let跟const是有块级作用域,而const赋值以后无法更改。

接口

用于做定义,来描述结构,关键字是:interface

1
2
3
4
5
6
7
8
9
10
interface labelObj {
label: string;
}

function LabelFn (labelObject: labelObj) : (a: string, b: number) {
return {
a: labelObject.label,
b: 20
}
}

只读属性

属性的只读设置:readonly x: string
数组的只读设置:ReadonlyArray = [1,2,3,4]

只读的信息是无法更改的,只能读取

额外的属性检查

在js中,当遇到传入参数,不在定义的参数之中,对于程序来说不会报错,只会当成一个额外的参数传入而已。
但是在ts中会认为这个是一个bug,然后抛出异常。当这个值作为变量或者参数传递的时候,存在了不包含的参数,就是一个错误。

而解决这种错误的方法就是要绕过检查:

  1. 利用断言的方式
    1
    2
    3
    4
    5
    6
    interface test {
    width: number;
    height: number;
    }

    let fn = function ({width: 20, color: 'red'} as test) {}
  2. 使用字符串索引签名: 可以往里面添加任意的索引
    1
    2
    3
    4
    5
    interface test {
    width: number;
    height: number;
    [propName: string]: any;
    }

    函数类型

    接口类型也可以定义函数,直接代替函数中的参数跟返回值
    1
    2
    3
    4
    5
    6
    7
    8
    interface fn {
    (name: string, age: number): boolean;
    }

    let myFn: fn;
    myFn = function(name: string, age: number) : boolean {
    return age > 18;
    }

可索引的类型

定义数组的接口,可定义string类型的索引,也可以定义number类型的索引

1
2
3
4
5
6
7
8
9
10
11
12
13
interface testArr {
[index: number]: string
}

interface testObj {
[objInx: string]: number
}

let arr: testArr = ['1', '2']
let obj: testObj = {
'a': 1,
'b': 2
}

类类型

可以用接口去约定类

1
2
3
4
5
6
7
8
interface classInterface {
currentTime: Date;
}

class Clock implements classInterface {
currentTime: Date;
constructor(h: number, m: number) {}
}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!