TS 接口

用vscode这类工具溯源经常遇到 xxx.d.ts 文件,基本上大多数情况下看懂它,就知道当前js库的正确打开姿势。

TS 新类型

any

如果在 TS 里没有声明类型,那么默认就是 any 类型

let a: number = 1
a = 'Hello' // 报错

let a: any = 1
a = 'Hello' // OK

enum

枚举多选一,理念同java枚举一样,与golang中的iota雷同

 enum Gender {
    Male = 'Male',
    Female = 'Female'
}

let gender: Gender = Gender.Male
gender = Gender.Female
console.log(gender) // 'Female'
gender = Gender.Woman // 报错

接口

在 TS 里接口一般是指对变量的描述,如属性

interface Human {
    readonly name: string
}
let jack: Human = {
    name: 'Jack'
}
jack.name = 'Ivan' // 报错: name 是只读的

又如,可选属性age,可计算属性propName

interface Human {
    gender: string,
    age?: number
}

interface Rect {
    height: number;
    width: number;
    [propName: string]: number
}

函数接口

这种骚操作,与golang结构体函数成员有得一拼

interface Fn {
    (a: number, b: number): number;
}

let add: Fn = function(a: number, b: number): number {
    return a + b
}
console.log(add(1, 2))

该接口相当于一个匿名函数,只声明了函数原型签名(入参与出参)

扩展接口

实现了一个类似于显式的接口继承

interface Animal {
    move(): void;
}

interface Human extends Animal {
    name: string;
    age: number;
}

let jack: Human = {
    age: 18,
    name: 'Jack',
    move() {
        console.log('move')
    }
}

类型断言

typeScript里的类型兼容性是基于结构子类型。 类型转换可用泛型表示符<>前置如下

var a:int=<int>someNumberAsString;

命名空间

ts中内部模块被称之为命名空间,外部模块简称模块
多文件使用引用标签 (三个反斜线打头的语句) 来告诉编译器文件之间的关联

/// <reference path="Validation.ts" />
namespace Validation {
    const lettersRegexp = /^[A-Za-z]+$/;
    export class LettersOnlyValidator implements StringValidator {
        isAcceptable(s: string) {
            return lettersRegexp.test(s);
        }
    }
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
pardon110
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
开发者 @ 社科大
文章
134
粉丝
24
喜欢
101
收藏
55
排名:106
访问:8.9 万
私信
所有博文
社区赞助商