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 协议》,转载必须注明作者和本文链接