typescript入门笔记1

135 阅读3分钟

背景:

2012年10月微软发布公开版的ts
2013年,微软发布正式版的ts

作者:安德斯·海尔斯伯格,C#的首席架构师。
特点:扩展了js语法,是js的一个超集,提供了类型系统和es6+的支持。

基础类型篇

布尔值

let isFlag: Boolean = true;

数字

let num: number = 1;

undefined和null

默认情况下null和undefined是所有类型的子类型。可以把null和undefined赋值给numer类型的变量

let und: undefined = undefined;
let nl: null = null;

数组

let list1: number[] = [1,2,3];

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

元组 Tuple

表示一个已知元素数量和类型的数组,各元素的类型不必相同。

let list: [string, number];
list = ['1', 1]; // ok
list = [false'str']; // error

枚举 enum

对js标准数据类型的补充,枚举数组默认从0开始依次递增。

enum Fruit {
    apple,
    grape,
    watermelon
}
let fruit: Fruit = Fruit.apple; // 0
let fruitName: string = Fruit[0]; // 'apple'

//可以手动指定成员的数值
enum Fruit {
    apple = 1,
    grape = 2,
    watermelon = 10
}
let fruit: Fruit = Fruit.grape; //2

any

let param: any = 1;
param'22'; // ok
let list: any[] = [1, '111', null];

void

表示函数没有返回值

function fn(): void {
    return null // ok
    return undefined // ok
    return '123' // error
}
let empty: void = undefined

object

表示非原始类型,除number, string, boolean之外的类型。

function fn(obj: object):object {
    console.log(obj);
    return {}
}
fn(123) //error
fn(new String(123)) // ok

联合类型

取值可以为多种类型中的一种;用"|"来表示。

function fn(x:number | string): string {
    return x.toString();
}

类型断言

好比其他语言里的类型转换,但不进行特殊的数据检查和结构。可以手动指定一个值的类型

function getLength(x: number | string) {
    if(x.length) { // error 
        return x.length
    } else {
        return x.toString().length
    }
}

//类型断言写法一:<类型>值
function getLength(x: number | string) {
    if((<string>x).length) {
        return (<string>x).length
    } else {
        return x.toString().length
    }
}

//类型断言写法二: 值 as 类型 tsx中只能用这种方式
function getLength(x: number | string) {
    if((x as string).length) {
        return (x as string).length
    } else {
        return x.toString().length
    }
}

类型推断

没有明确的指定类型时推测出一个类型。

有2种情况:1.定义变量时赋值了,推断为对应的类型。 2.定义变量时没有赋值,推断为any类型

// 定义变量时赋值了,推断为对应的类型
let a = 123; // number类型
a = ‘a’; // error

// 定义变量时没有赋值,推断为any类型
let b; // any类型
b = 123; //ok
b = ‘abc’; //ok

接口 Interfaces

使用接口定义对象的类型。接口是对象的状态(属性)和行为(方法)的抽象(描述)

接口定义

interface IEmployees {
    id: number
    name: string
    age: number
    resume: string 
}

可选属性

interface IEmployees {
    id: number
    name: string
    age: number
    resume?: string
}

只读属性

interface IEmployees {
    readonly id: number
    name: string
    age: number
    resume: string
}

函数类型

除了普通类型外,接口也能描述函数类型。需要给接口定义一个调用签名。

interface Func {
    (x: string, y: string): boolean
}
const myFunc: Func = function(x: string, y: string): boolean {
    return x === y
}

类类型

明确强制一个’类’去符合某种契约。

interface Alarm {
    alert(): any
}

class Features implements Alarm {
    alert() {
        alter(1)
    }
}

类实现多个接口

interface Alarm {
    alert(): any
}

interface Warn {
    warn(): void
}

class Features implements Alarm, Warn {
    alert() {
        alter(1)
    }
    warn() {
        console.log(1)
    }
}

接口继承接口

interface Alarm {
    alert(): any
}

interface Warn {
    warn(): void
}

interface AlarmAndWarn extends Alarm, Warn {
    push(): any[]
}