在componentWillReceiveProps里面setState之后是不会接着触发componentWillReceiveProps的,否则那就是死循环了。
1.union types
正如字面意思上面所说,union type就是联合类型。万万没想到在typescript中,字符串字面量也能够成为类型,如下所示:
1 2 3
| type St = "string"; const faith: St = "string"; const freedom: St = "string2";
|
在某些场合下,我们希望某个字符串只能是某几个可选的值之一,那么这个时候使用union type将会特别方便,如下所示:
1 2 3 4
| type St = "Man" | "Women" | "She" | "He" | "Me"; const theMan: St = "Man"; const theWomen: St = "Women"; const errorIsValid: St = "Aha";
|
下面再看一个使用union type的例子,感受下他对类型系统所作出的作用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| interface I1 { type: "1"; value: string }
interface I2 { type: "2"; value: string }
interface I3 { type: "3"; value: string }
interface I4 { type: "4"; value: string }
type smlz2 = I1 | I2 | I3 | I4;
function init(param: smlz2) { switch(param.type) { case "1": param.value = "one"; break; case "2": param.value = "two"; break; case "3": param.value = "three"; break; default: const neverChoice: never = param; } }
const par: smlz2 = { type: "4", value: "four" }; init(par);
|
2.泛型方法
不多说,直接介绍使用方法,下面是一个泛型方法的使用方式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| const getData = <T>(url: string): Promise<T> => { return fetch(url).then(response => { if (!response.ok) { throw new Error(response.statusText); } return response.json(); }) }
interface ApiRes { errorMes: string; content: object; status: number; };
getData<ApiRes>("/api/mockMe").then(res => { console.log(res.content); });
|
3.泛型类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| class List<T> { private data: T[] = [];
public getList(): T[] { return this.data; }
public add(item: T) { this.data.push(item); } }
interface Person { name: string; age: number; }
let peopleList = new List<Person>(); peopleList.add({ name: 'hahahai', age: 23 }); peopleList.add({ name: 'hahahai', nickName: 'xh' });
|
4.如果想在react中使用redux的话,那么只需要安装redux即可,无需安装type声明文件,因为redux package里面已经包含了type声明文件。