【ts】typeScript高阶:any和unknown
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
学习目标: 1、any和unknown的区别 2、unknown类型与其他类型的联合类型、交叉类型 3、unknown的应用–结合类型收缩
提示:以下是本篇文章正文内容,下面案例可供参考
一、any与unknown类型的区别
1、any类型表示任意类型,放弃了ts类型检查,ts中应该少用
type T1 = keyof any; // string | number | symbol
2、unkonw类型是暂时未知类型(之后会知道),仍然会进行ts的类型检查
type T2 = keyof unknown;// never
3、在ts的类型系统中never(空类型)是最窄的类型,any是最宽的类型
二、unknown类型与其他类型的联合类型、交叉类型
1.unknown类型与其他类型的联合类型
代码如下(示例):
type T00 = unknown | null; // unknown type T00 = unknown | undefined; // unknown type T00 = unknown | null | undefined; // unknown type T00 = unknown | string; // unknown type T00 = unknown | string[]; // unknown type T00 = unknown | any; // any type T00 = unknown | unknown; // unknown
2.unknown类型与其他类型的交叉类型
代码如下(示例):
type T00 = unknown & null; // null type T00 = unknown & undefined; // undefined type T00 = unknown & null & undefined; // nerver type T00 = unknown & string; // string type T00 = unknown & string[]; // string[] type T00 = unknown & any; // any type T00 = unknown & unknown; // unknown
3.unknown类型与其他类型的关系
代码如下(示例):
let value: unknown; let value1: unknown = value; //正确 let value2: any = value; // 正确 let value3: boolean = value; // 错误 let value4: string = value; // 错误 let value5: number = value; // 错误 let value6: object = value; // 错误 let value7: any[] = value; // 错误 let value8: Function = value; // 错误
4.unknown类型经典例子
type T50<T> = {
[P in keyof T]: number};
type T51 = T50<any>; // {[key: string]: number}
type T52 = T50<unknown>; // {}
三、unknown的应用–结合类型收缩
declare function isFunction(x: unknown): x is Function;
function f20(x: unknown) {
if (x instanceof Error) {
x; // Error};
if (isFunction(x)) {
x;// Function}
}
