首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    你可能不知道的 JS 特性:可选链

    新特性,目前处于 Stage 3 阶段,它叫作 可选链(optional chaining),它可能解决很多人都面对过的痛点,让我们来了解下~ 为什么我们需要它 想象一下你从某个 api 获取数据,返回的对象嵌套了好多层...Freelancer" ] } // Getting the firstName const personFirstName = person.details.name.firstName; 上面的代码很容易产生错误...,我们一般会这么改进: // Checking if firstName exists if( person && person.details && person.details.name...默认值 为了优雅地设置默认值,我们引入另外一个特性:空值合并运算符(nullish-coalescing-operator),听起来好像很复杂,其实也很简单: const personFirstName...立刻,马上就能让你使用它: babel-plugin-proposal-optional-chaining 最后的话 这个特性在很多其他的语言如 C#,Swift 中都有实现,并且 TypeScript

    1K20

    null 和 undefined 的区别!

    undefined是 "当一个变量没有被赋值时使用" null "表示有意不存在任何对象值" 1.2 两个非值--一个无法消除的错误 在JavaScript中拥有两个非值现在被认为是一个设计错误(甚至被...let myVar; assert.equal(myVar, undefined); 如果一个属性.unknownProp丢失,访问该属性会产生undefined的值。...也就是说,只要value.prop会抛出一个异常,就会发生这种情况。 否则,返回value.prop。...(«arg0», «arg1») // optional function or method call 4.4 undefined 和 null 和 nullish 聚结 nullish 合并算子??...我们的方法的好处是,它得到了TypeScript的良好支持(通过判别性联合)。 6.我的方法 我不喜欢用undefined作为 "关闭 "的值,有三个原因。

    1.1K10

    TypeScript中的类型断言

    类型断言与其他语言中的类型强制转换有相似之处,但是它们不会引发异常,并且在运行时也不做任何事情(它们确实会静态执行一些少量的检查)。...示例:声明一个接口 为了访问任意对象 obj 的属性 .name,我们暂时将 obj 的静态类型更改为 Named(A行和B行)。...`) 如果值的类型是包含 undefined 或 null 类型的联合,则 non-nullish声明运算符(或 non-null 声明运算符)将从联合中删除这些类型。...遗憾的是,.get() 的结果不能反映这一点,这就是为什么我们必须使用 nullish 断言运算符的原因: 1function getLength(strMap: Map...13 initProperties() { 14 this.x = 0; 15 this.y = 0; 16 } 17} 如果我们在 A 行和 B 行中使用“定值分配断言”(感叹号),则错误会消失

    3.8K40

    【JS】1847- JavaScript 中几个优雅的运算符使用技巧

    它改变了访问对象内部属性的方式,尤其是深层嵌套的属性。它也可以作为 TypeScript 3.7 + 中的功能使用。 相信大部分开发前端的的小伙伴们都会遇到 null 和未定义的属性。...但是,当对象具有可选属性或某些配置对象具有某些值的动态映射时,可能会遇到类似情况,需要检查很多边界条件。 这时候,如果我们使用可选链接运算符,一切就变得更加轻松了。...错误,parent.getTitle?....= expr2 逻辑空值运算符仅在 nullish 值(null 或者 undefined)时才将值分配给 expr1,表达方式: x ??= y 可能看起来等效于: x = x ??...从左到右操作,如果 x 不为 nullish 值则中表达式不执行。因此,如果 x 不为null 或者 undefined,则永远不会对表达式y进行求值。如果y是一个函数,它将根本不会被调用。

    23321

    分享 30 道 TypeScript 相关面的面试题

    通过引入静态类型,它允许开发人员在编译时而不是运行时捕获与类型相关的错误。 这可以减少错误,提高代码可读性,并通过增强的工具(例如自动完成和代码导航)提供更高效的开发体验。...当您事先不知道对象的键但知道其值的类型时,这是很有用的。 21、TypeScript 如何处理可选链接和 nullish 合并? 答案:TypeScript 支持可选链接 (?.)...22、什么是映射类型,以及如何在 TypeScript 中使用它们? 答案:映射类型允许通过转换属性在现有类型的基础上创建新类型。它们遵循一种模式,您可以在其中迭代对象类型的属性并生成新类型。...在 TypeScript 中,当装饰器应用于类成员时,它们会提供元数据或更改被装饰元素的行为。它们可用于各种任务,例如日志记录、验证或增强功能。...答案:keyof 运算符生成给定类型的已知公共属性名称的并集,这对于限制可能的字符串值或创建映射类型很有用。

    1K30

    鸿蒙高质量代码静态检测200条二

    循环而不是标准“for”循环@typescript-eslint/prefer-function-type强制使用函数类型而不是带有签名的对象类型@typescript-eslint/prefer-includes...强制使用“includes”方法而不是“indexOf”方法@typescript-eslint/prefer-nullish-coalescing强制使用空合并运算符(??)...而不是逻辑运算符@typescript-eslint/prefer-optional-chain强制使用链式可选表达式,而不是链式逻辑与、否定逻辑或、或空对象@typescript-eslint/prefer-readonly...如果私有成员从未在构造函数之外进行修改,则要求将其标记为“只读”@typescript-eslint/prefer-readonly-parameter-types要求将函数参数解析为“只读”类型,以防止参数被修改而产生一些副作用...“string”类型@typescript-eslint/return-await要求异步函数返回“await”@typescript-eslint/semi"@typescript-eslint/semi

    6900

    vue2项目中如何使用es2020

    新增了包括访问器属性、对象的反射创建和检查、属性属性的程序控制、额外的数组操作函数、对 JSON 对象编码格式的支持以及提供增强的错误检查和程序安全性的严格模式等特性; 2011年06月,发布了5.1,...=, &&=, ||=); WeakRef,用于引用目标对象而不将其从垃圾收集中保留; FinalizationRegistry,用于管理在目标对象被垃圾收集时执行的清理操作的注册和注销; 数字文字的分隔符...官方提供的预设 名称 说明 @babel/preset-env 编译 ES2015+ 语法 @babel/preset-typescript 编译 Typescript 语法 @babel/preset-react...{ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-optional-chaining...:https://babeljs.io/docs/en/options#name-normalization 对应es-x版本插件集 示例:es2020 @babel/plugin-proposal-nullish-coalescing-operator

    1.9K20

    一文读懂 TS 中 Object, object, {} 类型之间的区别

    Object 接口中的属性冲突,则 TypeScript 编译器会提示相应的错误: // Type '() => number' is not assignable to type // '() =...当你试图访问这样一个对象的任意属性时,TypeScript 会产生一个编译时错误: // Type {} const obj = {}; // Error: Property 'prop' does...: const pt = {}; pt.x = 3; pt.y = 4; 然而以上代码在 TypeScript 中,每个赋值语句都会产生错误: const pt = {}; // (A) // Property...// @ts-ignore 注释会忽略下一行中产生的所有错误。建议实践中在 @ts-ignore之后添加相关提示,解释忽略了什么错误。 请注意,这个注释仅会隐藏报错,并且我们建议你少使用这一注释。...4.3 {} 类型 {} 类型:它描述了一个没有成员的对象。当你试图访问这样一个对象的任意属性时,TypeScript 会产生一个编译时错误。

    17.8K32

    vue2项目中如何使用es2020

    新增了包括访问器属性、对象的反射创建和检查、属性属性的程序控制、额外的数组操作函数、对 JSON 对象编码格式的支持以及提供增强的错误检查和程序安全性的严格模式等特性; 2011年06月,发布了5.1,...=, &&=, ||=); WeakRef,用于引用目标对象而不将其从垃圾收集中保留; FinalizationRegistry,用于管理在目标对象被垃圾收集时执行的清理操作的注册和注销; 数字文字的分隔符...官方提供的预设 名称 说明 @babel/preset-env 编译 ES2015+ 语法 @babel/preset-typescript 编译 Typescript 语法 @babel/preset-react...{ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-optional-chaining...:https://babeljs.io/docs/en/options#name-normalization 对应es-x版本插件集 示例:es2020 @babel/plugin-proposal-nullish-coalescing-operator

    1K10

    【TS 演化史 -- 13】字符串枚举 和 弱类型(Weak Type)探测

    字符串值枚举成员没有反向映射 TypeScript 为每个构造映射对象的枚举发出一些映射代码。...对于字符串值枚举成员,此映射对象定义从键到值的映射,反之则不是: var MediaTypes; (function (MediaTypes) { MediaTypes["JSON"] = "application...从 TypeScript 2.4 开始,当属性没有重叠时,给弱类型赋值是一个错误,带有以下消息的类型检查器错误 类型“{ semicolons: boolean; }”与类型“PrettierConfig...另一个好处是 TypeScript 语言可以给咱们自动完成建议,因为类型注释告诉它咱创建的对象的类型。 弱类型的解决方法 如果出于某种原因,咱们就是不想从特定弱类型的弱类型检测中获得错误,该怎么办?...弱类型检测的限制 请注意,弱类型检测仅在属性中完全没有重叠时才会产生类型错误。

    1.6K10

    页面白屏了?看看可选链操作符(?.)

    允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。 比如,思考一个存在嵌套结构的对象 obj。...如果只是直接访问 obj.first.second,而不对 obj.first 进行校验,则有可能抛出错误。 有了可选链操作符(?.)...链式操作符,不同之处在于: 在引用为空(nullish) (null 或者 undefined) 的情况下不会引起错误,该表达式短路返回值是: undefined。...当尝试访问可能不存在的对象属性时,使用可选链操作符将会使表达式更短、更简明。 有两点需要我们留意: 如果存在一个属性名且不是函数, 使用 ?....仍然会产生一个 TypeError 异常 (x.y is not a function). let result = someInterface.customMethod?.

    91050

    TypeScript 4.4 RC版来了,正式版将于月底发布

    换句话说,TypeScript 不允许使用 symbol 键作为索引对象。...} 精确可选属性类型 (--exactOptionalPropertyTypes) 在 JavaScript 当中,读取对象上的属性缺失会产生 undefined 值。...路径映射速度更快 TypeScript 希望加快构建路径映射的速度(使用 tsconfig.json 中的 paths 选项)。对于包含数百个映射的项目,由此带来的性能提升相当显著。...为大型输出更快生成源映射 TypeScript 4.4 为超大输出文件提供了源映射生成优化功能。与旧版 TypeScript 编译器相比,新版本的发布时长可缩短约 8%。...因为没有正确考虑到 Node 的 node_modules 解析、路径映射、符号链接与重新导出等因素,这些路径往往会产生一定的误导效果。

    2.6K20

    V8 引擎发布了 v8.0

    我们会提供一个新的编译器吗?我们是否会跳过版本 8 和 9,而使 V8 停留在永恒的某个版本 X 中? ?...String.prototype.charCodeAt); charCodeAt(string, 8); 到目前为止,对 TurboCan 来说,对 charCodeAt 的调用是完全不透明的,这导致了对用户定义函数的通用调用的产生...没有错误检查的链可能会抛出错误,而带有显式错误检查的链很冗长,并且会产生有害的后果,即需要检查所有真实值而不是仅检查非空值。...Nullish 合并 nullish合并运算符 ?? 是新的用于处理默认值短路的二元运算符。...使用 nullish 合并运算符,在a ?? b中,当 a 的值为空(null 或 undefined)时,评估结果为 b,否则为 a。这是理想的默认值行为,用 ?? 重写上面的例子可修复这个错误。

    79920
    领券