摘要:一、使用介绍 条件类型基本语法: T extends U ? X : Y; 如果占位符类型U是一个可以被分解成几个部分的类型,譬如数组类型,元组类型,函数类型,字符串字面量类型等。这时候可以通过infer来获取U类型中某个部分的类型。 官方解释:现在在有条件类型的 extends 子语句中,允许出现
阅读全文
摘要:一、什么是类型兼容性 TS 的类型兼容性是指当一个类型的值可以被另一个类型的变量所接受时,这两种类型就是兼容的 集合论中,如果一个集合的所有元素在集合B中都存在,则A是B的子集;类型系统中,如果一个类型的属性更具体,则该类型是子类型。(因为属性更少则说明该类型约束的更宽泛,是父类型) 因此,我们可以
阅读全文
摘要:题目:实现内置的Exclude <T,U>,从 T 中排除可分配给 U 的那些类型 type x = string | number | boolean type y = string | number type c = MyExclude<x, y> const b: c = true 解答: t
阅读全文
摘要:🐹 一、T[number]、T['length'] T[number] 用来获取元组的元素类型联合T['length'] 用来获取元组的元素类型个数 💡元组类型是另一种Array类型,它确切地知道它包含多少元素,以及在特定位置包含哪些类型。 type A = ['a', 'b', 'c'] ty
阅读全文
摘要:🐡 需求: Omit 会创建一个省略 K 中字段的 T 对象。 这和 Pick 很像,只是结果相反,Pick 是挑选需要的字段,而 Omit 则是排除指定的字段 🤔 思考:根据现了解的关键字, keyof 肯定要用,可是怎么排除其他的键?😊 思路:用 never 来做键,就能在这个字段值排除了
阅读全文
摘要:🐹 第一题 🙋:下面的代码为什么会提示错误,应该如何解决上述问题? type User = { id: number; kind: string; }; function makeCustomer<T extends User>(u: T): T { //不能将类型“{ id: number;
阅读全文
摘要:一、内置的类型工具 1. 适用于 interface 的类型操作符 这些操作符主要用于处理对象类型,比如 interface 和对象字面量类型 { key: value }。它们通常用于修改、选取或排除对象的属性。 🐡 Partial<T>:将对象类型 T 的所有属性设为可选。 interface
阅读全文
摘要:🐹 1. 非空断言操作符(!) 在上下⽂中当类型检查器⽆法断定类型时,⼀个新的后缀表达式操作符 ! 可以⽤于断⾔操作对象是⾮ null 和⾮ undefined 类型 🐡 赋值时忽略 null 和 undefined const fn = (name: string | null | undef
阅读全文
摘要:🐹 1. 一个问号(?) 在 TypeScript 中用于表示可选属性和可选参数,使得属性和参数可以选择性地存在。主打的就是两个字“随意” 🐡 可选属性: 在对象类型中,可以使用问号来标记某个属性是可选的。这意味着该属性可以存在,也可以不存在。 interface Person { name:
阅读全文
摘要:一、模块(外部) TypeScript 在 1.5 版本之前,有内部模块和外部模块的概念,从 1.5 版本开始,内部模块改称作命名空间,外部模块改称为模块。TypeScript 中的模块系统是遵循 ES6 标准的,TypeScript 和 ES6 保持一致,包含顶级 import 或 export
阅读全文
摘要:一、文件类型 TS 中有两种文件类型: ⏰ .ts文件(代码实现文件) 1. 既包含类型信息又可执行代码 2. 可以被编译为 .js 文件,然后执行代码 3. 通常用于编写程序代码的地方 ⏰ .d.ts文件(类型声明文件) 1. 只包含类型信息的类型声明文件 2. 不会生成 .js 文件,仅用于提供
阅读全文
摘要:一、声明文件的作用 在ts文件中引入js文件,由于js代码中没有类型约束,所以ts无法获得js代码的类型信息,进而会隐式推断js中类型为any,失去了ts代码类型推断和约束的作用,声明文件就是将一个js模块中所有对外暴露的变量、函数、类使用ts语法进行类型声明,进而让ts编译器在检测到该声明文件之后
阅读全文
摘要:上一篇介绍 namespace 多文件拆分的内容时,用到了一个三斜杠指令 /// <reference path="xxx" />。 这组指令有多个,其作用分别有所不同。 一、前言 三斜杠指令是包含一个XML单标签的单行三斜杠注释,注释的内容可被编译器识别,用来指示编译器在编译的过程中包含其它文件,
阅读全文
摘要:一、前言 在js早起未出现“模块”这一概念以前,为了确保我们创建的变量不会泄露至全局变量中,我们以前曾采用过这种代码组织形式: (function(someObj){ someObj.age = 18; })(someObj || someObj = {}); 后来,js慢慢引入了文件模块的概念,通
阅读全文
摘要:一、什么是模板字面量类型 ( Template Literal Types ) typeScript 提供给我们的,用于字符串字面量扩展的有效工具 模板文本类型基于字符串字面量类型构建,并且能够通过联合扩展到多种字符串字面量类型。 语法: `${T}` 🔔注意:这里的 T 是类型占位,我们不知可以
阅读全文
摘要:一、概述 在大多数情况下,我们在使用对象前就可以确定对象的结构,并为对象中的属性添加准确的类型。 但是当我们无法确定对象中有哪些属性时,或者说对象中可以出现任意多个属性时,此时,我们就可以用索引签名类型了。 ⏰ 索引签名,主要是用来规定索引和属性值的类型,索引类型只能是 string 类型 或者 n
阅读全文
摘要:理解重载 用于实现不同参数输入并且对应不同参数输出的函数,在前面定义多个重载签名,一个实现签名,一个函数体构造,重载签名主要是精确显示函数的输入输出,实现签名主要是将所有的输入输出类型做一个全量定义,防止TS编译报错,函数体就是整个整个函数实现的全部逻辑。 函数重载 🌰应用例子: 一个班级有很多学
阅读全文
摘要:在你刚学 TypeScript 的时候,是不是遇到了很多令人抓狂的问题,最终你用上 any 大招把问题解决了。如果后期你没有系统的学习 TypeScript 的类型系统,你会发现你可能把 TypeScript 学成了 AnyScript。 在 TypeScript 中,any 类型被称为 top t
阅读全文
摘要:TS中的联合类型 | 和交叉类型的区别 联合类型 " | " : 会把2者的属性进行合并,也就是形成并集,进行类型声明的时候,你的属性可以是前者,属性不能少,当时声明了几个就要写几个,也可以是后者,也可以前者+后者。 type A = { name: string, age: number } ty
阅读全文
摘要:一、泛型是什么 软件工程中,我们不仅要创建一致的定义良好的 API,同时也要考虑可重用性。 组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型,这在创建大型系统时为你提供了十分灵活的功能。 在像 C# 和 Java 这样的语言中,可以使用泛型来创建可重用的组件,一个组件可以支持多种类型的数据
阅读全文