首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

TypeScript 强大的类型别名

X : Y; 上面的类型意思是,若T 能够赋值U,那么类型是 X,否则为 Y。...原理是令T'和U'分别为T和 U 的实例,并将所有类型参数替换为any,如果T'能赋值 U',则将有条件的类型解析成 X,否则为Y。...,而 d 不能赋值 Words 类型,所以 WD 为 false。...never : T; 以上语句的意思就是 如果 T 能赋值 U 类型的话,那么就会返回 never 类型,否则返回 T,最终结果是将 T 中的某些属于 U 的类型移除掉,举个例子: type T00...自定义类型别名 下面是一些可能会经常用到,但是 TS 没有内置的一些类型别名: Omit 有时候我们想要继承某个接口,但是又需要在新接口中将某个属性 overwrite 掉,这时候通过 Pick

3.3K20

React、Nextjs中的TS类型过滤原来是这么做的~

大家好,我是零一,相信大家在阅读同事写的代码或者优秀的开源库的代码时,一定见过各种各样的风骚的TS写法,不花点时间下去根本看不懂,换作是我们,可能就直接一个 any 完事了,但是真正当项目体积变大后,你会发现这些...,比如: type Keys = 'a' | 'b' | 'c' | 'd' type Obj = { [T in Keys]: string; // 遍历Keys,把每个key都赋值string...K : never 对应的 key 值赋值,假设遍历第一个key值为 a,那么 Example[K] = Example[a] = string,此时就是 string extends string...key 值筛选了出来 别急别急,离成功就差一步之遥 最后登场的就是 Pick ,这个类型是TS内置的,简单了解一下它的作用 // Pick类型的实现 type Pick<T, K extends keyof...如果在屏幕前阅读的你是后端,说不定也能在后端的开源框架源码中看到它的身影呢~ 如果本文对你有所帮助,请个点赞,十分感谢~ 我是零一,分享技术,不止前端!

89830

TS 从 0 到 1 - 泛型进阶

A = { name: 2022 }; 泛型参数的默认类型遵循以下规则: 有默认类型类型参数被认为是可选的 必选的类型参数不能在可选的类型参数之后 如果类型参数有约束,类型参数的默认类型必须满足约束...// 若 T 能赋值 U 那么类型是 X,否则是 Y T extends U ?...如,never 类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头表达式的返回值类型。 没有类型是 never 的子类型或可以赋值 never 类型(除了 never 本身)。...Pick的作用是将某个类型中的子属性挑出来,变成包含这个类型部分属性的子类型。...定义 // 如果 T 能赋值 U,那么就会返回 never 类型,否则返回 T 类型 // 最终实现的效果就是将 T 中某些属于 U 的类型移除掉 type Exclude = T extends

69920

Typescript 高级用法以及项目实战问题

的作用就跟 any 高度类似了,你可以把它转化成任何类型,不同的地方是,在静态编译的时候,unknown 不能调用任何方法,而 any 可以。...never: let n: never; let o: any = {}; n = o; // Error: 不能把一个非never类型赋值never类型,包括any 关于 never 的这个特性有一些很...Test: string 首选看 extends 后面的内容,{t: infer Test}可以看成是一个包含t属性的「类型定义」,这个t属性的 value 类型通过infer进行推断后会赋值Test...type Omit = Pick> 在定义中,第一步先从 T 的 key 中去掉与 K 重叠的 key,接着使用 Pick 把 T 类型和剩余的 key...Q: 是否允许 any 类型的出现 A: 说实话,刚开始使用 TS 的时候还是挺喜欢用 any 的,毕竟大家都是从 JS 过渡过来的,对这种影响效率的代码开发方式并不能完全接受,因此不管是出于偷懒还是找不到合适定义的情况

1.8K50

类型体操:探究 TypeScript 内置高级类型

Pick Pick 的作用是,从 T 类型(对象类型)中,提取出 K(联合类型)圈定的 key,返回一个新的对象类型。...看看 Pick 的实现: /** * From T, pick a set of properties whose keys are in the union K */ type Pick<T, K...R : any; 等号左侧的 (...args: any) => any 代表一个任意函数类型,用于限制传入参数的类型。 然后我们看到了一个新的关键词 infer,代表引用的意思,用于类型推导。...提取了模式上匹配的一个字符串 在 T extends (...args: any) => infer R ? R : any; 中,我们返回值部分设置了 infer,并提供了一个局部变量 R。...如果 extends 条件判断是继承关系,那么变量 R 就会被赋值函数的返回值。 后面的判断为真的分支(? 后面的表达式)就能拿到这个 R。判断为假的分支就无法拿到,因为匹配失败了。

78010

TypeScript 超详细入门讲解

' //这一行代码会报错,因为 a 的变量类型是 number ,不能赋值字符串 但是编译还是会成功的 2. string 定义一个 string 类型的值 let b: string b = 'hello...字面量 限定取值范围为男和女 let d: '男' | "女" d = '男' 5. any 任意类型,相当于对改变量关闭了类型检测,显示 any 使用 TS ,不建议使用 any let e: any...e = 1 e = 'hello' 声明变量不指定类型,就会被设置为 any,隐式 any 6. unknown unknown 表示未知类型,是一个类型安全的 any unknown 类型的变量,不能直接赋值其他变量...let f: unknown f = 'hello' f = 1 f = true 类型断言 当我们需要将 unknown 类型的变量赋值其他类型的变量的时候,我们可以给他指定类型 c = f as...: 20} 实现原理 keyof T 键名的联合类型,K 要删除的类型,通过 Exclude 来排除 K ,再通过 Pick 取出剩下的类型 Pick> 3

67010

TypeScript 超详细入门讲解

' //这一行代码会报错,因为 a 的变量类型是 number ,不能赋值字符串 但是编译还是会成功的 2. string 定义一个 string 类型的值 let b: string b = 'hello...字面量 限定取值范围为男和女 let d: '男' | "女" d = '男' 5. any 任意类型,相当于对改变量关闭了类型检测,显示 any 使用 TS ,不建议使用 any let e: any...e = 1 e = 'hello' 声明变量不指定类型,就会被设置为 any,隐式 any 6. unknown unknown 表示未知类型,是一个类型安全的 any unknown 类型的变量,不能直接赋值其他变量...let f: unknown f = 'hello' f = 1 f = true 类型断言 当我们需要将 unknown 类型的变量赋值其他类型的变量的时候,我们可以给他指定类型 c = f as...: 20} 实现原理 keyof T 键名的联合类型,K 要删除的类型,通过 Exclude 来排除 K ,再通过 Pick 取出剩下的类型 Pick> 3

65410

深入浅出 TypeScript

默认情况下 null 和 undefined是所有类型的子类型。开启--strictNullChecks 后,null 和 undefined只能赋值 any和它们各自以及void。...number和bigint类型的值不能互相赋值。 其他类型 any。绕过编译阶段的检查,避免使用。 unknown 。是 any 类型对应的安全类型。...never 类型表示的是那些永不存在的值的类型,never类型是任何类型的子类型,也可以赋值任何类型;然而,没有类型是 never的子类型或可以赋值 never类型(除了never本身之外)。...type ReturnType = T extends (...args: any[]) => infer P ? P : any; 如果T能赋值函数类型,则返回函数的返回类型。...也就是说,如果T不能赋值U,则返回该值。如果有多个值不能赋值,则TT是联合类型

2.8K30

《现代Typescript高级教程》高级类型

Pick Pick 是一个映射类型,它从给定类型中选择一部分属性来创建新类型。...type Record = { [P in K]: T; }; 示例使用: type Weekday = "Monday" | "Tuesday" |...下面是一个示例,展示了如何使用infer关键字: type ReturnType = T extends (...args: any[]) => infer R ?...infer关键字的作用是告诉 TypeScript 编译器在条件类型中推断一个待定的类型,并将其赋值声明的类型变量。这使得我们可以在条件类型中使用这个推断出的类型进行进一步的类型操作。...需要注意的是,infer关键字只能在条件类型的右侧使用,用于声明一个待推断的类型变量,而不能在其他地方使用。此外,每个条件类型只能使用一次infer关键字,并且通常与泛型一起使用。

18630

TypeScript的另一面:类型编程

,没有额外被接口/类型别名/奇怪的东西包裹过的,就像被Wrapped包裹后就不能再被称为裸类型参数。...这里实际上使用到了分布式条件类型的特性,假设 Exclude 接收 T U 两个类型参数,T 联合类型中的类型会依次与 U 类型进行判断,如果这个类型参数在 U 中,就剔除掉它(赋值为 never) type...never : T; 那么 Omit: type Omit = Pick>; 剧透下,几乎所有使用条件类型的场景...另外一种省心的方式是不进行条件类型的判断,直接全量递归所有属性~ 返回键名的工具类型 在有些场景下我们需要一个工具类型,它返回接口字段键名组成的联合类型,然后用这个联合类型进行进一步操作(比如 Pick...需要注意的是,有时候单个工具类型不能满足你的要求,你可能需要多个工具类型协作,比如用FunctionKeys+Pick得到一个接口中类型为函数的字段。

1.6K20
领券