TypeScript学习记录

今天也好喜欢你啊。

写这篇的时候,也满脑子的你。

2020/02/18



1.TypeScript 只会进行静态检查,如果发现有错误,编译的时候就会报错,但仍会生成js文件

如果要在报错的时候终止 js 文件的生成,可以在 tsconfig.json 中配置 noEmitOnError 即可




1.JavaScript 的类型分为两种:原始数据类型和对象类型。

原始数据类型包括:布尔值、数值、字符串、null、undefined 以及 ES6 中的新类型 Symbol。

在 TypeScript 中,boolean 是 JavaScript 中的基本类型,而 Boolean 是 JavaScript 中的构造函数。其他基本类型(除了 null 和 undefined)一样

eg:

let isDone: boolean = false; 编译通过

let createdByNewBoolean: boolean = new Boolean(1);或者 let createdByNewBoolean: Boolean = new Boolean(1);  编译不通过,因为返回的是一个 Boolean 对象


2.Void、undefined 和 null

在 TypeScript 中,可以用 void 表示没有任何返回值的函数;

声明一个 void 类型的变量没有什么用,因为你只能将它赋值为 undefined 和 null;

undefined 和 null 是所有类型的子类型。也就是说 undefined  和 null类型的变量,可以赋值给其他变量;void不行

eg:

let num: number = undefined; 编译通过


3.any类型

允许被赋值为任意类型;

变量如果在声明的时候,未指定其类型,那么它会被识别为任意值类型;

eg:

let something;

something = 'seven';

something = 7;  编译通过,因为类型推论将something认为any

eg:

let myFavoriteNumber = 'seven';

myFavoriteNumber = 7;  编译不通过,因为类型推论将myFavoriteNumber认为string


4.联合类型

当不确定一个联合类型的变量到底是哪个类型的时候,我们只能访问此联合类型的所有类型里共有的属性或方法

eg:

let myFavoriteNumber: string | number;

5.interface

它是对行为的抽象,而具体如何行动需要由类(classes)去实现(implement);接口一般首字母大写;

一旦定义了任意属性,那么确定属性和可选属性都必须是它的子属性

eg:

interface Person {

    name: string;

    age?: number;

}

name属性必须有,age可以没有,除了这两个不允许有其他属性。


eg:

interface Person{

    name: string;

    age?: number;

    [propName: string]: any;

}

使用 [propName: string] 定义了任意属性取 string 类型的值。

let tom: Person = {

    name: 'Tom',

    gender: 'male'

};

eg:

interface Person {

    readonly id: number;

    name: string;

    age?: number;

    [propName: string]: any;

}

let tom: Person = {

    id:1,

    name: 'Tom',

    gender: 'male'

};

只读属性在第一次给对象赋值时也要赋值,只是后面不能修改

tom.id = 89757;  会编译失败


6.数组(待续)

数组: let fibonacci: number[] = [1, 1, 2, 3, 5];

数组泛型:  let fibonacci: Array<number> = [1, 1, 2, 3, 5];


7.函数

在 TypeScript 的类型定义中,=> 用来表示函数的定义,左边是输入类型,需要用括号括起来,右边是输出类型;

与ES6中的 => 完全不同

eg:

let mySum = function (x: number, y: number): number {

    return x + y;

};

let mySum: (x: number, y: number) => number = function (x: number, y: number): number {

    return x + y;

};

前者利用类型推论推断出mySum的类型


允许可选参数,用 “?”表示,但可选参数必须在必须参数之后

eg:

function buildName(firstName?: string, lastName: string) {

    ...

}


允许参数默认值,TypeScript 会将添加了默认值的参数识别为可选参数;此时就不受「可选参数必须接在必需参数后面」的限制了

eg:

function buildName(firstName: string = 'Tom', lastName: string) {

  ...

}


剩余参数,使用 “...rest”方式

eg:

function push(array, ...items) {

  ....

}


允许函数重载

TypeScript 会优先从最前面的函数定义开始匹配,所以多个函数定义如果有包含关系,需要优先把精确的定义写在前面


8.断言

当不确定一个联合类型的变量到底是哪个类型的时候,我们只能访问此联合类型的所有类型里共有的属性或方法。此时可以使用类型断言,将该变量“转换”为联合类型中的一个;

断言成一个联合类型中不存在的类型是不允许的

eg:

function getLength(something: string | number): number {

   if ((<string>something).length) {

        return (<string>something).length;

    } else {

        return something.toString().length;

    }

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。