【ts】typeScript高阶:any和unknown

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前端必备工具推荐网站(免费图床、API和ChatAI等实用工具):
http://luckycola.com.cn/

前言

学习目标:
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}
}

总结

可以把任何类型赋值给any类型的变量,并对该变量执行任何操作(不需要关注类型,等同js);同样可以把任何值赋值给unkonw类型的变量,但是必须进行类型检查或者断言才能对变量进行操作变量(必须关注变量的类型)。

猜你喜欢

转载自blog.csdn.net/qq_48896417/article/details/125075974
今日推荐