You don't have javascript enabled. Good luck! :(

欢迎页

Welcome to Ganace's Blog


欢迎您来到Ganace 的个人博客。

在茫茫互联网的海洋里能够遇见,实在是一份不小的幸运。

诚挚地向您问候一声:您好,朋友!

这里是属于Ganace个人的隐秘小空间,记录了工作学习中遇到的知识点与灵感,以及生活中的碎碎念与吐槽突如其来的中二病尬尬的文艺时间锻炼腹肌的时刻惊喜的小发现等等。

想要在自己的平淡无奇的人生长河中留下些什么,

或者只是为了拯救老人家岌岌可危的记忆力,

仅此而已。

来到此地,分享与你。

也期待与您的再次相遇!

Share with Me


有任何的分享或者建议与吐槽,都可以Email我:ganace@foxmail.com

欢迎您的来信!

【TypeScript】TypeScript类型体操(二) 简单挑战

  Mar 18, 2024     Ganace     Front-end-Foundation

TypeScript

TypeScript 的类型体操笔记,温故知新。

AwaitedIfConcatIncludes

PushUnshiftParameters


简单挑战

一、Awaited

假如我们有一个 Promise 对象,这个 Promise 对象会返回一个类型。在 TS 中,我们用 Promise 中的 T 来描述这个 Promise 返回的类型。请你实现一个类型,可以获取这个类型。
type MyAwaited<T extends PromiseLike<any>> = T extends PromiseLike<infer U> ? (U extends PromiseLike<any> ? MyAwaited<U> : U) : never;
TypeScript提供的工具类型:

Awaited<Type> 用来获取 Promise 返回的类型

二、If

实现一个 IF 类型,它接收一个条件类型 C ,一个判断为真时的返回类型 T ,以及一个判断为假时的返回类型 FC 只能是 true 或者 falseTF 可以是任意类型。

三、Concat

在类型系统里实现 JavaScript 内置的 Array.concat 方法,这个类型接受两个参数,返回的新数组类型应该按照输入参数从左到右的顺序合并为一个新的数组。
type Concat<T extends readonly unknown[], U extends readonly unknown[]> = [...T, ...U];

四、Includes

在类型系统里实现 JavaScriptArray.includes 方法,这个类型接受两个参数,返回的类型要么是 true 要么是 false
//源版
type Includes<T extends readonly any[], U> = {
    [P in T[number]]: true;
}[U] extends true
    ? true
    : false;
//修订版
type IsEqual<T, U> = (<G>() => G extends T ? 1 : 2) extends <G>() => G extends U ? 1 : 2 ? true : false;

type Includes<Value extends any[], Item> = IsEqual<Value[0], Item> extends true ? true : Value extends [Value[0], ...infer rest] ? Includes<rest, Item> : false;

五、Push

在类型系统里实现通用的 Array.push
type Push<T extends unknown[], U> = [...T, U];

六、Unshift

实现类型版本的 Array.unshift
type Unshift<T extends unknown[], U> = [U, ...T];

七、Parameters

实现内置的Parameters 类型,而不是直接使用它
type MyParameters<T extends (...args: any[]) => any> = T extends (...any: infer S) => any ? S : any;
TypeScript提供的工具类型:

Parameters<Type> 从函数类型 Type 的参数中使用的类型构造元组类型。