- TypeScript 和 PropTypes
- interface 与 type
- TypeScript中implements与extends的区别
奇技淫巧
declare global {
interface Window {
replaceState: boolean;
}
}
(<any>window)['someProperty']
(window as any)['someProperty']
目录
Typescript
├ TSLint ✔
├ 手册指南
│ ├ interface
│ ├ implements
│ └ Generic
├ 声明文件
└ 项目配置
ES版本与TS关系:
待解决
- 类型注解
- 接口
- 类
基础类型
boolean
number
string
数组
// 方括号
let list:number[] = [1, 2, 3];
// Array Generic (数组泛型)
let list:Array<number> = [1, 2, 3];
// 接口
interface NumberArray {
[index: number]: number;
}
let list: NumberArray = [1, 2, 3];
// Array-like Object (类数组)
// IArguments, NodeList, HTMLCollection
?
// Tuple
let x: [string, number];
// enum
// any
// void
function warnUser(): void {
console.log("This is my warning message");
}
// null undefiled
// 可以把 null和undefined赋值给number类型的变量
// --strictNullChecks
// never
// object
类型断言
let strLength: number = (<string>someValue).length;
let strLength: number = (someValue as string).length;
泛型
function createArray<T>(length: number, value: T): Array<T> {
let result: T[] = [];
for (let i = 0; i < length; i++) {
result[i] = value;
}
return result;
}
在函数内部使用泛型变量的时候,由于事先不知道它是哪种类型,所以不能随意的操作它的属性或方法:
function loggingIdentity<T>(arg: T): T {
console.log(arg.length);
return arg;
// index.ts(2,19): error TS2339: Property 'length' does not exist on type 'T'.
}
可以对泛型进行约束,只允许这个函数传入那些包含 length 属性的变量。这就是泛型约束:
interface Lengthwise {
length: number;
}
function loggingIdentity<T extends Lengthwise>(arg: T): T {
console.log(arg.length);
return arg;
}