极客江南: 一个对开发技术特别执着的程序员,对移动开发有着独到的见解和深入的研究,有着多年的iOS、Android、HTML5开发经验,对NativeApp、HybridApp、WebApp开发有着独到的见解和深入的研究, 除此之外还精通 JavaScript、AngularJS、 NodeJS 、Ajax、jQuery、Cordova、React Native等多种Web前端技术及Java、PHP等服务端技术。
初学者玩转 TypeScript系列,总计 10 期,本文为第 7 期,点赞、收藏、评论、关注、三连支持!
对于初学者来说,学习编程最害怕的就是,难。
那么,Typescript 是不是很难?
首先,我可以肯定地告诉你,你的焦虑是多余的。新手对学习新技术有很强的排斥心理,主要是因为基础不够扎实,然后自信心不够强。
1.infer关键字
- infer关键字
- 条件类型提供了一个infer关键字, 可以让我们在条件类型中定义新的类型
// 需求: 定义一个类型, 如果传入的是数组, 就返回数组的元素类型,
// 如果传入的是普通类型, 则直接返回这个类型
// type MyType<T> = T extends any[] ? T[number] : T;
// type res = MyType<string[]>;
// type res = MyType<number>;
// type MyType<T> = T extends Array<infer U> ? U : T;
// type res = MyType<string[]>;
// type res = MyType<number>;
2. unknown
/*
1.什么是unknown类型?
unknown类型是TS3.0中新增的一个顶级类型, 被称作安全的any
* */
*
// 1.任何类型都可以赋值给unknown类型
// let value:unknown;
// value = 123;
// value = "abc";
// value = false;
// 2.如果没有类型断言或基于控制流的类型细化, 那么不能将unknown类型赋值给其它类型
// let value1:unknown = 123;
// let value2:number;
// value2 = value1;
// value2 = value1 as number;
// if(typeof value1 === 'number'){
// value2 = value1;
// }
// 3.如果没有类型断言或基于控制流的类型细化, 那么不能在unknown类型上进行任何操作
// let value1:unknown = 123;
// value1++;
// (value1 as number)++;
// if(typeof value1 === 'number'){
// value1++;
// }
// 4.只能对unknown类型进行 相等或不等操作, 不能进行其它操作(因为其他操作没有意义)
// let value1:unknown = 123;
// let value2:unknown = 123;
// console.log(value1 === value2);
// console.log(value1 !== value2);
// console.log(value1 >= value2); // 虽然没有报错, 但是不推荐, 如果想报错提示, 可以打开严格模式
// 5.unknown与其它任何类型组成的交