函数中声明数据类型 8. 类型推论 (type inference) 9. 联合类型 10. 泛型 Generics 11. 类型别名 12. 字面量 13. 交叉类型 1....原始数据类型和 any 类型 ---- 最新的 ESMAScript 标准定义了八种数据类型 七种原始数据类型: number、string、boolean、undefined、null、BigInt、...另外一种是 Object 注意: undefined、null 是所有类型的子类型,所以下面写法是正确的 let age: number = undefined 顶级类型: any,可以接收所有数据类型的数据...数组和元组(tuple) ---- 声明一个 number 类型的数组,数组元素必须为 number 类型 let numArr: number[] = [1, 2, 3] 元组: 给数组元素分别指定数据类型...[U, T] { 约束泛型 interface ILength {
TypeScript 类型编程 TypeScript 的类型系统,最基本的是简单对应 JavaScript 的 基本类型,比如 string、number、boolean 等,然后是新增的 tuple、...引入了 泛型,让类型也能成为参数了。...鉴于 JavaScript 太灵活,TypeScript 实现的是结构类型系统,我们又觉得泛型的简单推到 T 的粒度还是不够细,我们希望能够获取 T 内部的结构。...于是,TypeScript 在泛型的基础上,又提供了 类型编程,通过一些语法,我们可以拿到 T 下更细粒度的类型,或通过判断拿到其他类型。 这个也被大家戏称为 类型体操。...总结一下,从类型能力上的增强的过程来说,就是: 基本类型 -> 泛型 -> 类型编程(类型体操) TypeScript 内置高级类型 TS 代码版本为 4.8.2 下面我们来看一下 TypeScript
本文主要介绍 TypeScript 的高级用法,适用于对 TypeScript 已经有所了解或者已经实际用过一段时间的同学,分别从类型、运算符、操作符、泛型的角度来系统介绍常见的 TypeScript...用来判断左侧的表达式是否是 null | undefined,如果是则会停止表达式运行,可以减少我们大量的&&运算。 比如我们写出a?....number } keyof返回泛型 T 的所有键枚举类型,key是自定义的任何变量名,中间用in链接,外围用[]包裹起来(这个是固定搭配),冒号右侧number将所有的key定义为number类型。...type为string的对象 adopt(dog); // Pass: 函数会根据入参类型推断出type为string 若不适用函数泛型推导,我们若需要定义变量类型则必须指定泛型类型。...123; // 不过这样type类型就是any了,无法自动推导出来,失去了泛型的意义 泛型默认值的语法格式简单总结如下: 泛型名 = 默认类型 泛型约束 有的时候,我们可以不用关注泛型具体的类型
# 类型系统 简单类型系统 变量、函数、类等都可以声明类型,编译器会基于声明的类型做类型检查 支持泛型的类型系统 声明时可以将变化的类型声明为泛型,编译器会根据传入的实际类型做类型检查 支持类型编程的类型系统...可以对传入的类型参数(泛型)做逻辑运算,产生新的类型 # TypeScript 类型系统中的类型 JavaScript 的运行时类型 boolean number bigint string symbol...新增类型 Tuple Enum Interface 特殊类型 any unknown never void # TypeScript 类型系统中的类型运算 条件:T extends U ?...TypeScript 的高级类型支持类型参数,可以做各种类型运算逻辑,返回新的类型,和函数调用是对应的,自然也支持递归。 TypeScript 类型系统不支持循环,但支持递归。...any 作为类型参数出现在条件类型左侧时,会直接返回 trueType 和 falseType 的联合类型。
如果返回值类型和数组类型一样,那就更好了。 在 TypeScript 中,当我们想要描述两个值之间的对应关系的时候,可以使用泛型。怎么使用呢?...记住,泛型都是将两个或多个值与同一类型相关联!...使用约束值 下面是使用泛型约束的时候常见的一个错误: function minimumLength( obj: Type, minimum...void 和 undefined 是不一样的 object 特殊类型 object 代表的是任意非原始类型的值(string、 number、bigint、boolean、 symbol、null 或者...30, 40] const a = multiply(10, 1, 2, 3, 4); 在 TypeScript 中,这些参数的类型注解隐式为 any[] 而不是 any,任何给定的类型注解也必须是 Array
let data: any = "Hello"; data = 123; 类型运算 类型运算符在TypeScript中用于对类型进行操作和组合。...以下是对常见的类型运算符进行介绍: 1. 联合类型(Union Types) 使用 | 运算符将多个类型组合成一个联合类型。表示变量可以是多个类型中的任意一个。...泛型约束(Generic Constraints) 使用 extends 关键字对泛型进行约束,限制泛型参数必须满足某些条件。...通过泛型约束,我们可以在函数内部使用泛型参数的特定属性或方法。 这些类型运算符可以帮助开发者更灵活地操作和组合类型,提供了更强大的类型系统支持。...总结 -- 通过了解这些基本类型和类型运算,开发者可以更好地定义变量、函数参数和返回值的数据类型,并在编码过程中捕获潜在的错误。
7.2、数组泛型 我们也可以使用数组泛型(Array Generic) Array 来表示数组: let fibonacci: Array = [1, 1, 2,...形如 的语法在 tsx 中表示的是一个 ReactNode,在 ts 中除了表示类型断言之外,也可能是表示一个泛型。...上面的例子中,数字类型的变量 foo 上是没有 length 属性的,故 TypeScript 给出了相应的错误提示。 这种错误提示显然是非常有用的。...需要注意的是,将一个变量断言为 any 可以说是解决 TypeScript 中类型问题的最后一个手段。 它极有可能掩盖了真正的类型错误,所以如果不是非常确定,就不要使用 as any。...9.7、类型断言 vs 泛型 本小节的前置知识点:泛型 还是这个例子: function getCacheData(key: string): any { return (window as
TypeScript 中的类型 原始类型 在 JavaScript 中,有 7 种原始类型: string number bigint boolean undefined null symbol 原始类型都是不可变的...people.push(person2); 泛型 泛型可以让我们创建一个可以在多种类型上工作的组件,它能够支持当前的数据类型,同时也能支持未来的数据类型,这大大提升了组件的可重用性。...在 TypeScript 中,泛型用于描述两个值之间的对应关系。在上面的例子中,返回类型与输入类型有关。我们用一个泛型来描述对应关系。...另一个例子:如果需要接受多个类型的函数,最好使用泛型而不是 any 。...禁止隐式 any 在下面的函数中,TypeScript 已经推断出参数 a 是 any 类型的。
在后续讲解泛型的时候,我们会再详细介绍 T 语法。 注意 [number]和普通数组不同,它表示的是元组 any TypeScript 还有一种特殊的 any 类型。...当你不想要让某个值引起类型检查错误的时候,可以使用 any。...不过,通常你会避免这种情况的发生,因为 any 是会绕过类型检查的。启用 noImplicitAny 配置项可以将任意隐式推断得到的 any 标记为一个错误。...toUpperCase()); } 联合类型 TypeScript 的类型系统允许你基于既有的类型使用大量的运算符创建新的类型。...另一种理解角度是,obj.counter 必须是 number 类型,而不是 0,因为类型可以用来决定读写行为。
这使得 unknown 成为 TypeScript 类型系统的另一种顶级类型(另一种是 any)。...在元组初始化的时候,我们还必须提供每个属性的值,不然也会出现错误,比如: tupleType = ["Semlinker"]; 此时,TypeScript 编译器会提示以下错误信息: Property...设计泛型的关键目的是在成员之间提供有意义的约束,这些成员可以是:类的实例成员、类的方法、函数参数和函数返回值。 泛型(Generics)是允许同一个函数接受不同类型参数的一种模板。...相比于使用 any 类型,使用泛型来创建可复用的组件要更好,因为泛型会保留参数类型。...其实这些大写字母并没有什么本质的区别,只不过是一个约定好的规范而已。也就是说使用大写字母 A-Z 定义的类型变量都属于泛型,把 T 换成 A,也是一样的。
通过使用 代码传入类型,您明确地让 TypeScript 知道您希望身份函数的泛型类型参数 T 的类型为 number。这将强制将数字类型作为参数和返回值。...此泛型类型用于函数的返回类型:Promise。 注意:由于您的函数是异步的,因此,您必须返回一个 Promise 对象。...如果仔细查看您的函数,您会发现参数列表或 TypeScript 能够推断其值的任何其他地方都没有使用泛型。这意味着调用代码在调用您的函数时必须显式传递此泛型的类型。...string, any>>(obj: T) { // ... } extends Record 被称为泛型类型约束,它允许您指定您的泛型类型必须可分配给 extends 关键字之后的类型...extends string> 第一个类型参数称为 T,它必须是可分配给 Record 类型的类型。
of type 'any', 'number', 'bigint' or an enum type. (2363) 要在 TypeScript 中声明具有特定类型的变量,请使用以下语法: declarationKeyword...Bigint bigint 类型是针对 ES2020 时可以使用的类型。它用于表示 BigInt,这是一种新的数据类型,用于存储大于 2^53 的整数。...在 TypeScript 中使用保存数组的变量的一个重要方面是大多数时候,我们必须键入它们。...; 这些声明都不会在 TypeScript 中产生错误,因为类型被声明为 any。 注意:大多数时候,如果可以的话,我们应该避免使用 any。...当使用未知类型的值执行任何操作时,TypeScript 需要确保类型是它所期望的类型。这样做的一个例子是使用 JavaScript 中已经存在的 typeof 运算符。
原始类型 「TypeScript」的原始类型包括: 「boolean、number、string、void、undefined、null、symbol、bigint。」...number和bigint类型的值不能互相赋值。 其他类型 any。绕过编译阶段的检查,避免使用。 unknown 。是 any 类型对应的安全类型。...泛型 「泛型」给予开发者创造灵活、可重用代码的能力。 设计泛型的关键目的是「在成员之间提供有意义的约束」,这些成员可以是:类的实例成员、类的方法、函数参数和函数返回值。...泛型类型兼容性 泛型本身就是不确定的类型,它的表现根据「是否被成员使用而不同」。...keyof,即索引类型查询操作符,我们可以用 keyof作用于泛型 T 上来获取泛型 T 上的所有 public属性名构成联合类型。
TypeScript 是 JavaScript 的一个超集,它的设计初衷并不是为了替代 JavaScript,而是基于 JavaScript 做了一系列的增强,包括增加了静态类型、接口、类、泛型、方法重载等等...TypeScript TypeScript 是静态类型语言,通过类型注解提供编译时的静态类型检查。 在代码编译阶段会进行变量的类型检测,提前暴露潜在的类型错误问题。...泛型允许同一个函数接受不同类型参数,相比于使用 Any 类型,使用泛型来创建的组件可复用和易扩展性要更好,因为泛型会保留参数类型。泛型可以应用于接口、类、变量。...使用大写字母 A-Z 定义的类型变量都属于泛型,常见泛型变量如下: T(Type):表示一个 TypeScript 类型 K(Key):表示对象中的键类型 V(Value):表示对象中的值类型 E(Element...通过 | 运算符定义。如下示例中,函数的入参为 String 或 Number 类型即可。
enumerated types 枚举类型 generics 泛型 modules 模块 主要不同点如下: TS 是一种面向对象编程语言,而 JS 是一种脚本语言(尽管 JS 是基于对象的)。...如果你已经用 JS 好久了,你可以选择走出舒适区学习 TS,也可以选择坚持自己的强项,继续使用 JS。 5 什么是泛型?...泛型是指在定义函数、接口或类的时候,不预先指定具体的类型,使用时再去指定类型的一种特性。...可以把泛型理解为代表类型的参数 // 我们希望传入的值是什么类型,返回的值就是什么类型 // 传入的值可以是任意的类型,这时候就可以用到 泛型 // 如果使用 any 的话,就失去了类型检查的意义 function...一般用来约束数组和对象 // 数字索引——约束数组 // index 是随便取的名字,可以任意取名 // 只要 index 的类型是 number,那么值的类型必须是 string interface
本文选自《Learning TypeScript中文版》一书,本文将带您了解类型、变量、基本类型和运算符的语言特性 类 型 TypeScript 是 JavaScript 的超集。...第一种,可以在数组元素的类型后面跟着[]来表示包含这种类型元素的数组: var list:number[] = [1, 2, 3]; 第二种是使用范型数组类型Array: var list:Array<...(x.splice(3, 1)); // 错误,'string'上不存在'splice'方法 } // x 依然是 any 类型 x.foo(); // 合法 在这段代码中,我们首先声明了一个any类型的变量...使用.d.ts结尾的声明文件,是用来提高 TypeScript 对第三方库和像 Node.js 或浏览器这种运行时环境的兼容性的。 算术运算符 下表中列出的是TypeScript 支持的算术运算符。...位操作在 JavaScript 中效率不如其他语言的原因是,它必须先将操作元从浮点型(JavaScript 存储数字的数据类型)转换成32位整型进行运算,然后再转换回浮点型。
泛型类型和函数泛型类型和函数允许创建的代码在各种类型上运行,而不仅支持单一类型。...参见以下示例:let s = new CustomStack();s.push(55); // 将会产生编译时错误泛型约束泛型类型的类型参数可以绑定。...last([1, 2, 3]);泛型默认值泛型类型的类型参数可以设置默认值。...这样可以不指定实际的类型实参,而只使用泛型类型名称。下面的示例展示了类和函数的这一点。...+ 1; // ok,值为2空值合并运算符空值合并二元运算符??用于检查左侧表达式的求值是否等于null或者undefined。如果是,则表达式的结果为右侧表达式;否则,结果为左侧表达式。
` ]; 复制代码 1.1babel解析默认插件 1.1.1 bigInt 我们已经用Number来表示JS中的数字,问题在于最大的数字是2⁵³,再往上的数字就不可靠了。...value; 复制代码 可选链运算符是一个短路计算操作,即当左侧?....有时候你会遇到这样的情况,你会比TypeScript更了解某个值的详细信息。 通常这会发生在你清楚地知道一个实体具有比它现有类型更确切的类型。...TypeScript会假设你,程序员,已经进行了必须的检查。 1.2.2 TS断言语法? 类型断言有两种形式。...至于使用哪个大多数情况下是凭个人喜好;然而,当你在TypeScript里使用JSX时,只有 as语法断言是被允许的。
最佳实践2:类型推断 TypeScript 的核心理念是显式地指定类型,但这并不意味着你必须在每次声明变量时都明确指定类型。...最佳实践8:使用 unknown 类型 unknown 类型是 TypeScript 3.0 中引入的一种强大且限制性更强的类型。它比 any 类型更具限制性,并可以帮助你防止意外的类型错误。...keyof 运算符是 TypeScript 的一个强大功能,可以创建一个表示对象键的类型。...最佳实践16:使用泛型 泛型是 TypeScript 的一个强大特性,可以让你编写可以与任何类型一起使用的代码,从而使其更具有可重用性。...泛型允许你编写一个单独的函数、类或接口,可以与多种类型一起使用,而不必为每种类型编写单独的实现。
领取专属 10元无门槛券
手把手带您无忧上云