首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

TypeScript 4.8 发布!重点新特性解读

所以我们现在可以定义出下面这样的函数,而不需要实现任何类型断言: function throwIfNullable(value: T): NonNullable { if (value...; } return value; } 优化对模板字符串中的 infer 类型推断 infer 可以在 extends 的条件语句中推断待推断的类型,比如下面这个简单用法: type...U : never; TypeScript 4.8 对在模版字符串中使用 infer extends 的情况进行了优化,下面这种情况 infer 以前会被约束为一个原始类型,现在可以推断出更精确的值:...inside. </3") adopt_animals() 但是在 JavaScript 中不是这样的,在对象之间的 == 和 === 检查的其实是两个对象的引用,这应该算作 JavaScript...TypeScript 以前允许 JavaScript 文件在 import 和 export 语句中导入和导出用类型声明,但是不支持值的导入导出。

87320
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【TS 演化史 -- 17】各文件的JSX工厂 、有条件类型和映射类型修饰符

    有条件类型 TypeScript 2.8 引入了有条件类型,这是类型系统的强大而令人兴奋的补充。 有条件类型使咱们可以表达非均匀类型映射,即,根据条件而不同的类型转换。...在有条件类型的extends子句中,可以使用新的infer关键字来推断类型变量,从而有效地执行类型上的模式匹配 type First = T extends [infer U, ...unknown...>; // string 注意,推断的类型变量(在本例中为U)只能在条件类型的true分支中使用。...咱们需要传递类型作为类型参数T的参数,而不是值;这就是为什么ReturnType和ReturnType是不正确的。...另一方面,Math.max() 方法期望任意多个数值参数(而不是单个数组参数);因此,类型D被解析为number[](而不是[number []])。

    2.5K20

    TypeScript 官方手册翻译计划【三】:类型收缩

    "function" 就像我们在 padLeft 中看到的,这个运算符经常出现在大量的 JavaScript 库中,而 TypeScript 也能理解这个运算符,从而在不同的分支中收缩类型。...幸运的是,TypeScript 让我们知道 strs 只是收缩到 string[] | null 类型而不是 string[] 类型。 这可能是讲解“真值”检查的一个不错的引子。...(后者的优势在于,TypeScript 可以将其推断为一个更具体的字面量布尔值类型 true,而前者只能被推断为 boolean) // 下面的结果都是 true Boolean("hello"); /...但除了分析每个变量,在 if、while 等条件语句中查找类型保护之外,TypeScript 还做了不少其他工作。...通过使用 "circle" | "square" 而不是 string,我们可以避免拼写错误。 function handleShape(shape: Shape) { // oops!

    2K20

    TypeScript 官方手册翻译计划【四】:函数

    在参数列表和返回值类型之间,它使用的是 : 而不是 =>。 构造签名 JavaScript 函数也可以通过 new 运算符进行调用。...它推断得到的返回值类型是 Type,而 firstElement2 推断得到的返回值类型却是 any,因为 TypeScript 需要使用约束类型去解析 arr[0] 表达式,而不是在函数调用期间“等着...在可能的情况下,请始终使用联合类型参数,而不是重载 在函数中声明 this TypeScript 可以通过代码流分析推断出函数中的 this 指向。...只要某个函数没有 return 语句,或者 return 语句中没有返回任何显式的值,那么函数的返回值类型就会被推断为 void: // 返回值的类型被推断为 void function noop()...30, 40] const a = multiply(10, 1, 2, 3, 4); 在 TypeScript 中,这些参数的类型注解隐式为 any[] 而不是 any,任何给定的类型注解也必须是 Array

    2.6K20

    TypeScript进阶 之 重难点梳理

    而「思维方式决定了编程习惯,编程习惯奠定了工程质量,工程质量划定了能力边界」,而学习 Typescript,最重要的就是我们类型思维的重塑。...如果不指定类型,就在定义的之后指定一个默认的类型 myLog(1) 「我们也可以把泛型变量理解为函数的参数,只不过是另一个维度的参数,是代表类型而不是代表值的参数。」...而 T[K]就是去对象的 T 下的key: K的 value infer infer 关键字最早出现在 PR 里面,「表示在 extends 条件语句中待推断的类型变量」 是在 ts2.8 引入的,在条件判断语句中...p : T; 在上面的条件语句中,infer P 表示待推断的函数参数,如果T能赋值给(param : infer p) => any,则结果是(param: infer P) => any类型中的参数...需要注意一下两点即可: 推荐类型断言的预发使用 as关键字,而不是 ,防止歧义 类型断言并非类型转换,类型断言发生在编译阶段。

    3.9K20

    【TypeScript 演化史 — 第三章】标记联合类型 与 never 类型

    代码的其余部分是纯 ES2015,而不是特定于 TypeScript。 我们遵循与前面示例相同的逻辑。基于 Redux 操作的 type 属性,我们在不修改现有状态的情况下计算新状态。...在 switch 语句的情况下,我们可以访问特定于每个操作类型的 text 和 index 属性,而不需要任何类型断言。...never 和 void 之间的区别 你可能会问,为什么 TypeScript 已经有一个 void 类型为啥还需要 never 类型。...这样的函数在 TypeScript 中被推断为有一个 void 返回类型。 具有 never 返回类型的函数永不返回。它也不返回 undefined。...也就是说,为函数表达式推断的返回类型可能与为函数声明推断的返回类型不同: // Return type: void function failwith1(message: string) { throw

    1.1K20

    一文看懂any,never,void和unknown的区别

    前言 不知道初学TypeScript的同学会不会和我一样被any,unknown,never和void这几个类型搞得晕头转向呢?...我们知道TypeScript在解析我们的代码时会对代码进行类型推断,并且在代码流不断深入的时候,类型会从较为宽泛的类型(例如any)一直推断到较为具体的类型,而这么推断下去是会有个终点,这个终点就是不存在的...,不可能发生的类型,也就是类型系统的底部类型(bottom type),而never就是TypeScript的底部类型。...= h // 由于这个代码永远也到达不了,所以h的类型被自动推断为never } } 上面的代码现在是没有问题的,不过假如某一天我们新增了一个新的PM类型,而忘记在printTechDude...void表示空值,也就是null或者undefined,而never则表示永远都不会出现的值。

    94230

    TypeScript 官方手册翻译计划【九】:类型操控-条件类型

    T['message'] : never interface Email { message: string; } interface Dog { bark(): void; }...在条件类型的真分支中,TypeScript 知道 T 将会有 message 属性。...在条件类型中进行推断 在上面的例子中,我们使用条件类型去应用约束并提取出类型。由于这种操作很常见,所以条件类型提供了一种更简单的方式来完成。...举个例子,在上面的 Flatten 函数中,我们可以直接推断出数组元素的类型,而不是通过索引访问“手动”提取出元素的类型: type Flatten = Type extends Array...Item : Type; 这里,我们使用 infer 关键字声明式地引入了一个新的泛型类型变量 Item,而不是在真分支中指定如何提取出 T 数组的元素类型。

    80820

    TypeScript 快速入门(基础篇)

    它是 JavaScript 的一个超集,TypeScript 在 JavaScript 的基础上添加了可选的静态类型和基于类的面向对象编程。...的子类型 别的类型不能赋值给never类型, 而 never 类型可以赋值给任意类型 void 类型 void 为 函数没有类型,一般用在没有返回值的函数 # 如果方法类型为number, 则必须返回内容..., 内容且必须为数字 function add():number{ return 2323; } # 如果方法类型为void,不需要返回内容 function getAdd():void{...} const aa = getAny() console.log(aa)//999 'Hello TypeScript' 类型检测 类型推断 变量的声明和初始化在同一行时,可以省去类型的声明 const...names = 'XiaoMing' 此时names的变量类型为 string names = 22 // TS 已经推断出了names 类型为string,而不能赋值为 其它类型 console.log

    1K20

    TypeScript 常用知识总结

    类型安全是一种在编码期间检测错误的功能,而不是在编译项目时检测错误。这为开发团队创建了一个更高效的编码和调试过程。...五、TypeScript 数据类型 any、number、string、boolean、数组、元组、枚举、void、null、undefined、never 六、注意点 Null 和 Undefined...而在TypeScript中启用严格的空校验(--strictNullChecks)特性,就可以使得null 和 undefined 只能被赋值给 void 或本身对应的类型 never 是其它类型(包括...这意味着声明为 never 类型的变量只能被 never 类型所赋值,在函数中它通常表现为抛出异常或无法执行到终止点(例如无限循环) 变量不要使用 name 否则会与 DOM 中的全局 window 对象下的...如果由于缺乏声明而不能推断出类型,那么它的类型被视作默认的动态 any 类型。

    1.8K30

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

    现代JavaScript高级小册 深入浅出Dart 现代TypeScript高级小册 类型守卫 概述 在 TypeScript 中,类型守卫可以用于在运行时检查变量的类型,并在代码块内部将变量的类型范围缩小到更具体的类型...这种类型收窄可以让 TypeScript 编译器更好地理解我们代码的意图,从而提供更准确的类型推断和类型检查。...} } printValue('hello'); // 输出: HELLO printValue(3.1415); // 输出: 3.14 在上面的示例中,我们使用 typeof 操作符在条件语句中检查变量...通过这种方式,我们能够更准确地推断和检查联合类型的变量。 使用 in 操作符进行类型守卫 in 操作符可以用于在 TypeScript 中判断一个属性是否存在于对象中,从而进行类型判断和类型收窄。...以下是一个示例: interface Bird { fly(): void; } interface Fish { swim(): void; } function isBird(animal

    30930
    领券