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

精读《Typescript 4.4》

本周精读的文章:announcing-typescript-4-4 概述 更智能的自动类型窄 类型窄功能非常方便,它可以让 Typescript 尽可能的像 Js 一样自动智能判定类型,从而避免类型定义的工作...其实这个功能早就有了,在我们 精读《Typescript2.0 - 2.9》 就已经介绍过,当时用的名词是自动类型推导,这次用了更精确的自动类型窄一词,因为只有类型窄是安全的,比如: function...console.log(arg.toUpperCase()); } } 而在 Typescript 4.4 之前的版本,如果我们这个判定赋值给一个变量,再用到 if 分支里,就无法正常窄类型了...Property 'toUpperCase' does not exist on type 'unknown'. } } 这个问题在 Typescript 4.4 得到了解决,实际上是把这种类型窄判断逻辑加深了...在 unknown 类型出来之前,Typescript 以 any 作为抛出错误的默认类型,毕竟谁也不知道抛出错误的类型是什么: try { // Who knows what this might

59020

让你更好使用 Typescript 的11个技巧

本文总结几个技巧,帮助你充分发挥语言的潜力。 类型想象成集合 类型是程序员日常概念,但很难简明地定义它。发现用集合作为概念模型很有帮助。...foo = shape; 理解类型声明和类型TypeScript 有一项非常强大的功能是基于控制流的自动类型窄。这意味着在代码位置的任何特定点,变量都具有两种类型:声明类型和类型窄。...circles = myShapes.filter(isCircle) as Circle[]; 一个更优雅的解决方案是isCircle和isRect改为返回类型谓词,这样它们可以帮助Typescript...name: 'yeah' }; // error because circle.name can be undefined console.log(circle.name.length); 我们遇到了错误...当然,我们可以删除:NamedCircle类型注释,但我们将为circle对象的有效性丢失类型检查。相当的困境。

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

    比较Go、Rust、Scala、Java、Kotlin、Python、Typescript 和 Elm中的编译器错误

    TLDR 编译器错误消息差异很大,并且没有关于编译器消息的标准或共同理解。从简短且令人困惑冗长的解释。...我们还得到了一个错误编号 TS2339。遗憾的是,在 Google 上搜索该编号没有找到更多信息。此外,Typescript 不会显示有问题的行或受影响的类型。...非常喜欢的一种语言(非常好的工具链),如果它没有为结构体使用借用检查器,而是使用可选的 GC,而不是用 Arc(喜欢 move 和 &mut 用于方法调用,每种语言都应该有这个但我离题了)来修补所有内容...有些人可能称之为“保姆编译器”,但我乐于接受任何帮助,因为总是可以减少错误报告。...结论 编译器错误存在巨大差异,我们的行业似乎还没有就编译器错误消息的重要性或风格达成共识。消息从神秘且误导性包含详细解释的长篇大论。选择开发平台有很多因素,也许我们应该更多地考虑错误消息

    13010

    如何处理TypeScript中的可选项和Undefined

    在项目中设置TypeScript的严格模式,将会检查代码中的所有潜在问题。建议你尽可能的让TypeScript更为严格(strict)。...告诉TypeScript属性是否是可选 使用JavaScript进行编程,肯定遇到过undefined is not a function此类错误。...TypeScript可以理解这类检查,并可以使用它们来窄对特定代码类型的检查范围(类型窄)。 我们可以对bar属性使用 typeof, 用来检查它是否是undefined。...实话实说,这个例子有点刻意为之。但是在JavaScript框架中,对可能尚未初始化的变量进行属性访问是很常见的。或是在编写lambda表达式时,代码会被类型守卫弄得很臃肿。可选链?....但好消息是,有很多工具可以用来处理它们。TypeScript使的JavaScript代码变得比以前更加健壮,而且该语言的持续发展使一切变得更好。

    3.7K10

    【JavaScript】ESlint & Prettier & Flow组合,得此三神助,混沌归太清

    Flow真是眼前一亮,就想,TypeScript挺好的,但或许也给人带来了一些烦恼,一旦用了TS,就意味着任何时候都要强制类型检查,觉得,选择JavaScript还是TypeScript就变成了这样一个问题...(耐用指的是维护性),但Flow帮我们找到了折中方案:类型检查这东西,我们在想用和需要用的时候用,同时不想用也可以不用,就好比就是手里有1000块,那我们就刚好去买1000块钱的衣服 Flow的使用 /...ESlint的使用 在VScode上下载Eslint扩展插件,最好把编辑器重启一下 设置Eslint这个VScode扩展插件的AutoFix功能,如图所示 在项目下安装eslint命令行并进行初始化...你的项目使用TypeScript? 1.Y 2.N (爽!妈妈再也不用担心的配置了) 你可能会问:哎呀!不小心搞错了选项!,那我要重新来一次吗?...我们有extends配置项这个好东西,它提供的继承功能直接集成了一些默认的配置,如下 "extends":[ "eslint:recommended", "plugin:@typescript-eslint

    1.1K20

    下一代前端语言之争,JavaScript 要被新语言反超?

    考虑生态系统的繁荣现状以及对 JS 类型检查难题的妥善解决,TypeScript 确实取得了非凡的成就。 当然,也有不少针对 TypeScript 的非议值得关注。...要求明确了,但我们该拿什么来换? 健全性 先从健全性说起。下一代语言不再努力对各种 JS 模式进行类型检查,而是以独立语言的形态通过更简单的类型系统代码编译成 JS。...觉得这个想法不错,只是跟我的观念相悖。想用下一代语言开发常规网站;不想要纯函数式语言,而更倾向于跟 C 的老派风格相似的语言(对不起了,Elm!)...再有,还想去掉一些没用的东西,比如对象、链表、多态变体等。这些都是 ReScript/ReasonML 做不到的,而且上次试用的时候,ReScript 的开发体验和错误消息也没给我留下深刻印象。...要跟这个子集交互,开发者需要使用 unsafe 代码块,比如 strict 块,或者让该子集通过 dynamic 块跟外部代码交互。这些都是假设,但我觉得其中确有探究的价值。

    38710

    TypeScript】never 和 unknown 的优雅之道

    1、前言  TypeScript 在版本 2.0 和 3.0 分别引入了 “never” 和 “unknown” 两个基本类型,在引入这两个类型之后,TypeScript 的类型系统得到了极大的完善。...(死循环),使得程序永远无法运行函数返回值那一步,永不存在返回。...any 是否满足这个特性呢?...开发者能够意识 handleValue 里面需要加上针对 Baz 的处理逻辑。通过这个办法,可以确保 handleValue 总是穷尽 (exhaust) 了 All 所有可能的类型。...通过深入了解 never 和 unknown 在 TypeScript 类型系统中的使用和地位,可以学习不少类型系统设计和集合论的知识,在实际开发中合理 narrow 类型,组织起可靠安全的代码。

    1.2K20

    使用Typescript和ES模块发布Node模块

    但是,当你想用TypeScript编写一个库或包,同时又想用JavaScript来发布,这样你的最终用户就不必手动编译你的代码,会发生什么?...$ npm install --save-dev typescript 安装TypeScript后,可以通过运行 tsc --init 初始化TypeScript项目。...喜欢所有TypeScript代码放在 src 目录中,因为这意味着我们可以直接TypeScript编译器指向它,因此,将使用以下代码创建 src/add.ts: export const add...要编译TypeScript,我们运行 tsc 并使用 -p 标志(“project”的缩写)告诉它 tsconfig.json 的位置: npx tsc -p tsconfig.json 如果你有任何类型错误或配置问题...发布CommonJS 难题的最后一部分是还将TypeScript配置为输出使用CommonJS的代码版本。

    2.6K20

    【Rust 日报】2022-10-13 一个小公司的CTO在reddit上发帖询问是否应该在公司内推广Rust

    很有意思的一个概念,可惜作者是在校学生,现在忙于学习,没有时间继续更新,但是这个概念真的很有意思,之前的macroquad (一个Rust实现的游戏引擎),获取下一帧也是用到了异步,说到底,Rust的异步本身的核心思想就是状态机...,负责大部分的编程工作,根据工作量的大小,我们会有24个开发人员在手下工作。...喜欢这两种语言,但更倾向于Rust。因为做了大部分的工作,觉得应该选择更喜欢用的那个。但我担心初级开发人员永远不会明白这一点。 想知道你们的看法。...应该使用Rust,因为想用它,还是应该使用GO,因为更多的人知道它,而且它可能更容易找到开发人员? 以下是一些高赞回答: 也是CTO。我们雇用了大学毕业的应届生,让他们学习Rust。...管理一个项目,其中有大量的restapi调用,它是从Python移植Rust的。光是Serde就为我们节省了数百甚至数千小时的工作。对Go不是很熟悉,但Rust的工具(库和基础设施)很不错。

    32660

    理解 TypeScript 类型拓宽

    一、类型拓宽 之前的文章,我们已经介绍了 TypeScript 的类型窄,本文我们介绍 TypeScript 的类型拓宽。...但是在静态分析时,当 TypeScript 检查你的代码时,变量含有一组可能的值和类型。当你使用常量初始化变量但不提供类型时,类型检查器需要确定一个。...通过 TypeScript错误提示消息,我们知道是因为变量 x 的类型被推断为 string 类型,而 getComponent 函数期望它的第二个参数有一个更具体的类型。...这在实际场合中被拓宽了,所以导致了一个错误这个过程是复杂的,因为对于任何给定的值都有许多可能的类型。例如: const mixed = ['x', 1]; 上述 mixed 变量的类型应该是什么?...它需要推断一个足够具体的类型来捕获错误,但又不能推断出错误的类型。它通过属性的初始化值来推断属性的类型,当然有几种方法可以覆盖 TypeScript 的默认行为。

    1.6K40

    为什么程序员如此热爱TypeScript

    Python 是的谋生工具,很喜欢它。尽管我对这门语言有一些 批评的地方,但我还是强烈推荐给任何开始从事数据科学的人。反正在这个领域中,比较有经验的人往往都是 Python 的布道师。...如果你碰巧在这些领域之一工作的话,那么值得给 TypeScript 一个机会。如果你不这么做的话,谁知道你的下一步会在哪里呢?这个领域发展得如此之快。如果你能将眼光放远一些,你就有了竞争优势。...TypeScript 是 JavaScript 的超集 TypeScript 是如何流行起来的 如果你讨厌 JavaScript 中不断发生的不合逻辑但又滑稽可笑的、令人抓狂的时刻,那么,有一个坏消息告诉你...因此,如果你的项目有大量的线性代数,你可能不会想用 TypeScript。 再次,如果你对 JavaScript 不是很熟悉的话,你几乎肯定会有一些困惑。...也就是说,如果你要开始一个没有太多大数据和矩阵运算的小项目,那么无论如何你都可以尝试一下 TypeScript。特别是当它涉及并行或异步编程时。

    45720

    TypeScript 官方手册翻译计划【二】:普通类型

    因为也是 TypeScript 的初学者,所以无法保证翻译百分之百准确,若有错误,欢迎评论区指出; 翻译内容:暂定翻译内容为 TypeScript Handbook,后续有空会补充翻译文档的其它部分;...启用 noImplicitAny 配置项可以任意隐式推断得到的 any 标记为一个错误。...当 TypeScript 能够基于代码结构推断出一个更具体的类型时,就会发生窄。...这个规则可以防止出现下面这样“不可能存在的”强制类型转换: const x = "hello" as number; // 类型 "string" 类型 "number" 的转换可能是错误的,因为两种类型不能充分重叠...字面量推断 当你初始化一个变量为某个对象的时候,TypeScript 会假定该对象的属性稍后可能会发生变化。

    2.2K20

    了不起的 TypeScript 入门教程

    在元组初始化的时候,我们还必须提供每个属性的值,不然也会出现错误,比如: tupleType = ["Semlinker"]; 此时,TypeScript 编译器会提示以下错误信息: Property...通过类型断言这种方式可以告诉编译器,“相信我,知道自己在干什么”。类型断言好比其他语言里的类型转换,但是不进行特殊的数据检查和解构。它没有运行时的影响,只是在编译阶段起作用。...之后,可恶的错误消息又消失了,因为这时 result 变量的类型是 string 类型。在 TypeScript 中除了可以重载普通函数之外,我们还可以重载类中的成员方法。...这个问题很好,答案是可以的。...sourcemaps 生成不同的文件 "inlineSources": true, // 代码与 sourcemaps 生成一个文件中,要求同时设置了 --inlineSourceMap

    7K52

    【译】Typescript 3.9 常用新特性一览

    Typescript 3.9 新特性一览 好消息消息,3.9 正式版本发布了 相关文章导航 Typescript 3.7 常用新特性一览 Typescript 3.8 常用新特性一览 Typescript...2、大大的提高了打包速度,微软团队自测的时候 typescript项目的平均编译时间由 26s 缩短到了 10s 左右。...根据 Visual Studio Code 团队提供的建议,我们发现在执行文件重命名时,单是查明哪些导入语句需要更新就要耗去 5 10 秒时间。...TypeScript 3.9 调整了内部编译器与语言服务缓存文件的查找方式,顺利解决了这个问题。...这是一项重大变化,但我们认为大部分代码在编写时都是为了考虑新的解释场景。如果您希望继续使用旧有行为,则可在!操作符左侧添加括号,如下所示: (foo?.bar)!.

    1.3K20

    CVE-2022-25636 的发现和利用

    何时/如何ctx初始化? 此时也意识这是在nft_fwd_dup_netdev_offload....nftables 看看是否/如何解决这个错误。...拼凑起来一些非常糟糕的代码放在一起,这些代码使用反射覆盖要发送的私有消息数组,手动构造必要的链创建消息,并翻转适当的位,等等等等。再过一个小时左右,又回到了开始的地方nft命令行界面。...在阅读 Alexander Popov 关于另一个最近的内核错误的文章以寻找灵感时,到了一个想法:我们有能力导致这些越界写入中的多个,而不仅仅是一个(因为dup可以多个 s 放入规则中)。...到了晚上(也许熬夜有点太晚了……),有了第一个概念的工作证明(在 ARM VM 不是 x86 中,因此有不同的寄存器等等)。 成功! 不过,在这方面又花了几个小时的时间,但我离代码执行还差得远。

    1.4K40

    TypeScript很麻烦,不想使用!

    前言 最近,我们部门在开发一个组件库时,注意一些团队成员对使用TypeScript表示出了抵触情绪,他们常常抱怨说:“TypeScript太麻烦了,我们不想用!”...起初,对此感到困惑:TypeScript真的有那么麻烦吗?然而,当我抽时间审查队伍的代码时,终于发现了问题所在。在这篇文章中,想和大家分享的一些发现和解决方案。...一、类型复用不足 在代码审查过程中,发现了大量的重复类型定义,这显著降低了代码的复用性。 进一步交流后,了解许多团队成员并不清楚如何在TypeScript中复用类型。...虽然这样做并非错误,但它违背了自定义Hook的一个常见规范:当Hook返回两个值时,应使用数组返回。...对于箭头函数,虽然它们不直接支持函数重载,但我们可以通过定义函数签名的方式来实现类似的效果。

    21510

    Vue 3.0对Web开发的影响

    讨论这些变化以及认为他们将在Vue 3.0发布后产生的影响。 1. Vue现在是什么? 用他们自己的话来说,Vue是一个“用于构建用户应用程序的渐进式框架”。...这个假设可以消除猜测并加快渲染过程。 单形调用 - 任何参加过计算机科学课程的人都有多态性概念敲入他们的大脑,但Vue 3.0在其渲染过程中使用单态调用。...解耦包 编译器重写 - 这是最兴奋的功能之一。这些更改不仅允许更好的IDE支持,而且现在它创建源映射,这意味着当存在运行时错误时,它将给出错误的文件位置和行号。...如果您现在使用Vue,您知道运行时错误消息对于识别问题几乎没有帮助。这次更新应该是开发者们的一口新鲜空气。...虽然继续强调VueJS的简单性,但有许多功能允许更多技术和经验丰富的开发人员完全控制他们的项目。 文档。这可能是一个“个人问题”,但我个人认为Vue的文档比React更易于理解。

    2.6K20

    如何把测试带给团队?

    我会把它归类为静态测试检查工具,因为如果你的代码里有语法错误,那 prettier 会格式化有问题的代码。 引入 TypeScript 和 Flow 可能会有点麻烦。...它们可能在做类型检查时不是那么有用,但我见过很多人放弃 TypeScript 的一个原因是:他们花了很多时间去想怎么才能写好类型。不完美就不完美吧,你可以在学到更多知识后再回过头来做更新迭代。...这个测试可能会写很长,但没关系(反正 E2E 写太短也是 常犯错误之一)。...这个 E2E 测试写起来不会很简单。 这取决于你的项目有多复杂,可能要一天或者几天才能在 CI 上跑上这个测试。如果你想用定时任务每一小时跑一下测试,也是可以的。就算你不能让它跑在 CI 上也没问题。...(译注:后面都是作者对他的 TestingJavaScript.com 的宣传,就不翻译了。关于这个课如何,扫了一眼再结合这个人的文章来看,应该是不错的,不过价格属实有点贵。

    27010
    领券