当前位置: 首页 > news >正文

「TypeScript」TypeScript入门练手题

前言

TypeScript 越来越火,现在很多前端团队都使用它,因此咱们前端码农要想胜任以后的前端工作,就要更加熟悉它。
在这里插入图片描述

入门练手题

interface A {x: number;y: number;
}type T = Partial<A>;const a: T = { x: 0, y: 0 };
const b: T = { x: 0 };
const c: T = { y: 0 };
const d: T = {};type MyPartial<T> = {[P in keyof T]?: T[P];
};interface B {x?: number;y: number;
}type T0 = Required<B>;const a0: T0 = { x: 0, y: 0 };type MyRequired<T> = {[P in keyof T]-?: T[P];
};interface C {x?: number;y: number;
}type T1 = Readonly<C>;const a1: T1 = { x: 0, y: 0 };// a1.x=1type MyReadonly<T> = {readonly [P in keyof T]: T[P];
};interface Cat {age: number;gender: string;
}type CatName = "seraph" | "ashe" | "ahri";const cats: Record<CatName, Cat> = {seraph: { age: 10, gender: "male" },ashe: { age: 5, gender: "female" },ahri: { age: 16, gender: "female" },
};/* 在 TypeScript 中,当你看到 K extends keyof any 这样的表达时,
它的作用是约束类型 K 为一个有效的类型,可以作为对象的键。
这里的 keyof any 是指所有可能的 JavaScript 值的键的联合类型。
简单来说,keyof any 通常等价于 string | number | symbol ,
因为在 JavaScript 中,对象的键可以是这三种类型。
你可以使用 string,number 或者 symbol 作为对象属性的键。 */type MyRecord<K extends keyof any, T> = {[P in K]: T;
};interface Todo {title: string;description: string;done: boolean;
}type TodoPreview = Pick<Todo, "title" | "done">;const todo: TodoPreview = {title: "play games",done: false,
};type MyPick<T, K extends keyof T> = {[P in K]: T[P];
};type E0 = Exclude<"a" | "b", "a">;type E1 = Exclude<string | number | (() => void), Function>;type MyExclude<T, U> = T extends U ? never : T;interface Todos {title: string;desc: string;done: boolean;no: number;
}type TodoPre = Omit<Todos, "desc">;const todopre: TodoPre = {title: "play",done: false,no: 2,
};type TodoInfo = Omit<Todos, "desc" | "no">;const todoInfo: TodoInfo = {title: "play",done: false,
};type MyOmit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;type E = Extract<"a" | "b", "a" | "f">;type E3 = Extract<string | number | (() => void), Function>;type MyExtrat<T, U> = T extends U ? T : never;declare function f(args: { a: number; b: string }): void;type P0 = Parameters<() => string>; // []type P1 = Parameters<(s: string) => void>; // [s: string]type P2 = Parameters<<T>(arg: T) => T>; // [arg: unknown]type P3 = Parameters<typeof f>;type MyParameters<T extends (...args: any) => any> = T extends (...args: infer P
) => any? P: never;type R = ReturnType<() => void>;const add = (x: number, y: number): number => {return x + y;
};type R1 = MyReturnType<typeof add>;type MyReturnType<T extends (...args: any) => any> = T extends (...args: any
) => infer R? R: any;
http://www.lryc.cn/news/348226.html

相关文章:

  • k8s 使用Docker和Containerd对比分析
  • MySQL 通过 systemd 启动时 hang 住了……
  • pat乙1033-旧键盘打字
  • Ubuntu安装VScode
  • c# - - - winform程序四个角添加圆角效果
  • Springboot 集成 Consul 实现服务注册中心-05
  • 【软考高项】四十六、项目管理科学计算之运筹学
  • 使用 Python 和 OpenCV 进行实时目标检测的详解
  • Android build.prop生成过程源码分析
  • 计算机网络教材——谢希仁教材与配套PPT课件和《计算机网络——自顶向下方法》
  • mysql 离线安装
  • 【C++】 string类:应用与实践
  • 巩固学习7
  • Android 右键 new AIDL 无法选择
  • 使用Springboot整合Elasticsearch
  • Vue3+Element+TS动态菜单+按钮权限控制实现探索
  • 五款公司源代码加密软件推荐|代码防泄密解决方案
  • 【spring】Security 密码加密算法
  • IO系列(一) -一文带你读懂 java 中的IO流!
  • 代码随想录算法训练营第六天| 242. 有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
  • 【python】中的可迭代对象、迭代器、生成器
  • 短视频矩阵系统源码/saas--总后台端、商户端、代理端、源头开发
  • K8s:二进制安装k8s(单台master)
  • C++类和对象下——实现日期类
  • 252 基于MATLAB的自适应差分阈值法检测心电信号的QRS波
  • SSIM(Structural Similarity),结构相似性及MATLAB实现
  • 第十六章-消费者-PUSH方式(一)
  • 【C++要哮着学】初识C++,什么是C++?什么是命名空间?什么又是缺省函数?
  • Lua 数字格式化
  • Java入门基础学习笔记13——数据类型