TypeScript核心语法

基本数据类型

  1. 布尔值:boolean

  2. 数值:number

  3. 字符串:string

  4. 特别的类型:void / undefined / null

undefinednull 是所有类型的子类型

任意值(any)

表示允许赋值为任意类型

  • any 类型的变量可以赋值任意类型的值

  • any 类型的变量可以使用任意属性和方法

  • 定义不指定类型的变量,且定义时不赋值,相当于类型的 any

类型推论

TypeScript 会在没有明确的指定类型的时候推测出一个类型

  • 定义变量时赋值了,推断为对应的类型

  • 定义变量时没有赋值,推断为 any 类型

联合类型(Union Types)

表示取值可以为多种类型中的一种

    let c1: number | string = 3;
    c1 = "123";

类型断言(Type Assertion)

可以用来手动指定一个值的类型

语法

<类型>值

值 as 类型

注意:tsx中只能用这种方式

接口(Interfaces)

在 TypeScript 中,我们使用接口来定义对象的类型

  • 接口:在面向对象的语言中,是 n 个行为的抽象/描述,但没有实现,由类去实现

  • 在 TS 中,接口也可以包含状态的描述

  • 只读属性: reasonly

  • 可选属性:?

样例:

    interface IPerson {
        readonly id: number;
        name: string;
        age: number;
        sex?: string;
    }

    const p: IPerson={
        id: 1,
        name: 'demo',
        age: 12,
        sex: '女'
    }

    const p2: IPerson = {
        id: 2,
        name: 'demo2',
        age: 13
    }

数组类型

方式一

number[]

方式二(泛型)

Array

    
    const names: string[] = ['a', 'b', 'c']

    
    const names: Array = ['a', 'b', 'c']

    
    const arr: any[] = ['b', 1, true]

元组

可包含多种类型元素的数组

    
    let person: [string, number] = ['tom', 12]

当添加越界的元素时,它的类型会被限制为元组中每个类型的联合类型(不能为联合类型之外的其他类型)

函数的类型

函数声明

    function fn1(x: string, y: number): number {
        return 2;
    }

可选参数

    const a= function fn1(x: string, y?: number): number {
        return 2;
    }
    console.log(a);

形参默认值

    const a = function fn1(x: string, y: number = 3): number {
        retu 

剩余参数

    const a = function fn1(x: string, ...args: any[]) {
        return args;
    }
    console.log(a('a', 1, "2", "jdsa", true));

声明文件

当使用第三方库时,我们需要引用它的声明文件,才能获得对应的代码补全、接口提示等功能

声明语句

如果需要 TypeScript 对新的语法进行检查,需要加载对应的类型说明代码

    declare var jQuery: (selector: string) => any;

声明文件

把声明语句放在一个单独的文件(jQuery.d.ts)中,ts 会自动解析到项目中所有声明文件

下载声明文件

    npm install @types/jquery --save-dev

枚举(Enum)

用于取值被限定在一定范围内的场景,比如一周只能有七天,颜色限定为红绿蓝等。

枚举使用 enum 关键字来定义

类(class)

访问修饰符

public:任何地方都可见,默认是 public

private:只在类内部可见

protected:类内部或子类中可见

readonly

只能通过构造方法赋值一次

抽象类(abstract)

可以包含抽象方法

不可以有实例

抽象类与实现类的区别

  • 抽象方法:有abstract / 没有方法体 / 不能创建实例

  • 实现方法:没有abstract / 有方法体 / 可以创建实例

接口与类

  • 对象的形状(shape) 进行描述

  • 对类的一部分行为进行抽象

  • 父接口可以有多个,但父类只能有一个:多实现,单继承

  • 一个类可以实现一个接口

  • 一个类可以继承于另一个类

    interface Light{
        lightOn(): void;
        lightOff(): void;
    }

    
    class Car implements Light {
        lightOn(){
            console.log('Car light on');
        }
        lightOff(){
            console.log('Car light off');
        }
    }

泛型

泛型是指在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性

    function createArray(length: number, value: T): Array {
        let result: Array = [];
        for (let i = 0; i < length; i++) {
            result[i] = value;
        }
        return result;
    }

    createArray(3, 'x')

使用 react-cli 创建 react-ts 项目

    create-react-app react-ts --typescript

你可能感兴趣的:(TypeScript核心语法)