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

为什么obj['NonExistentKey']不在TS中抛出一个错误?

在TS中,当我们使用obj['NonExistentKey']来访问一个对象的属性时,如果该属性不存在,TS不会抛出一个错误,而是返回undefined。这是因为TS中的对象属性访问方式有两种:点表示法和方括号表示法。

在点表示法中,我们使用obj.NonExistentKey来访问对象的属性。如果属性不存在,TS会在编译时抛出一个错误,提示我们该属性不存在。

而在方括号表示法中,我们使用obj['NonExistentKey']来访问对象的属性。这种方式更加灵活,可以使用变量或表达式作为属性名。但是由于TS无法在编译时确定属性名的具体值,因此无法在编译时检测到属性是否存在,也就无法抛出错误。

这种设计决策是为了保持TS的灵活性和兼容性。在某些情况下,我们可能需要动态地访问对象的属性,而无法提前确定属性名。使用方括号表示法可以满足这种需求,但需要我们在运行时自行处理属性不存在的情况。

如果我们希望在访问对象属性时能够在TS中抛出错误,可以使用点表示法来替代方括号表示法。例如,使用obj.NonExistentKey而不是obj['NonExistentKey']。这样在编译时就能够检测到属性不存在的错误。

腾讯云相关产品和产品介绍链接地址:

  • 云服务器(CVM):提供弹性计算能力,满足各类业务需求。产品介绍链接
  • 云数据库MySQL版(CDB):提供稳定可靠的云端数据库服务。产品介绍链接
  • 云原生容器服务(TKE):提供高度可扩展的容器化应用管理平台。产品介绍链接
  • 人工智能机器学习平台(AI Lab):提供丰富的人工智能开发工具和服务。产品介绍链接
  • 物联网开发平台(IoT Explorer):提供全面的物联网设备接入和管理能力。产品介绍链接
  • 移动推送服务(信鸽):提供高效可靠的移动消息推送服务。产品介绍链接
  • 云存储(COS):提供安全可靠的云端存储服务。产品介绍链接
  • 区块链服务(BCS):提供一站式区块链解决方案。产品介绍链接
  • 腾讯会议:提供高清流畅的在线会议和协作服务。产品介绍链接
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

以淘宝店铺为例,谈谈 TypeScript ESLint 规则集考量

为什么:逻辑或 || 会将 0 与 "" 视为 false 而导致错误的应用默认值,而可选链相比于逻辑与 && 则能够带来更简洁的语法(尤其是在属性访问嵌套多层,或值来自于一个函数时,如 document.querySelector...no-throw-literal 不允许直接 throw 一个字符串如:throw 'err',只能抛出 Error 或基于 Error 派生类的实例,如:throw new Error('Oops!'...为什么抛出的 Error 实例能够自动的收集调用栈信息,同时借助 proposal-error-cause[3] 提案还能够跨越调用栈来附加错误原因传递上下文信息,不过,真的会有人直接抛出一个字符串吗...为什么:@ts-ignore 与 @ts-expect-error 二者的区别主要在于,前者是 ignore,是直接放弃了下一行的类型检查而无论下一行是否真的有错误,后者则是期望下一行确实存在一个错误,...并且会在下一行实际不存在错误抛出一个错误

2.7K30

大数据开发自学vue3踩坑实录:努力成为vue高高手

大部分浏览器只认识JavaScript,所以要将ts转换成js就要用到babel(一个插件,安装即用)。...我们知道vue项目的入口通常是main.ts,从main.ts开始,需要逐级解析各个模块import和require的依赖,并将项目中的所有模块打包成浏览器需要静态资源,所以就需要一个打包工具,webpack...写代码测试一下:let obj = {}console.log(obj?.a?.c)console.log(obj.a.c)定义了一个空数组obj,然后访问a属性的c属性,当然a、c是不存在的。...我们一个使用了可选链,一个没有使用,运行测试:从控制台可以看到,使用了可选链的表达式返回了undefined。没有使用可选链的抛出了TypeError。我们也可以在可选链中使用 ??...如果不在nextTick执行,就经常提示div undfined的错误

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

    proto: object | null): any; // ... } 将原始类型作为原型传递给 Object.setPrototypeOf() 或 Object.create() 将导致在运行时抛出类型错误...当你试图访问这样一个对象的任意属性时,TypeScript 会产生一个编译时错误: // Type {} const obj = {}; // Error: Property 'prop' does...的原型链隐式地使用: // Type {} const obj = {}; // "[object Object]" obj.toString(); 在 JavaScript 创建一个表示二维坐标点的对象很简单...// @ts-ignore 来忽略错误。...// @ts-ignore 注释会忽略下一行中产生的所有错误。建议实践在 @ts-ignore之后添加相关提示,解释忽略了什么错误。 请注意,这个注释仅会隐藏报错,并且我们建议你少使用这一注释。

    16.9K21

    深入浅出TypeScript | 青训营笔记

    TS最终会被编译为标准的JavaScript代码,因此可以运行在任何支持JavaScript的环境。 使用TS带来了许多好处,例如更早地发现类型相关的错误、提高代码可读性、使用面向对象的编程范式等。...TS 基础 TS里面的基础数据类型 在TypeScript,基本数据类型包括: number:表示数字类型,包括整数和浮点数。...最后使用 str、obj 和 num 三个变量分别调用 logLength 函数,可以看到只有 str 和 obj 能够成功输出结果,而 num 因为没有 length 属性而导致编译错误。 4...."noUnusedParameters": true, // 有未使用的参数时,抛出错误 "noImplicitReturns": true,...// 并不是所有函数里的代码都有返回值时,抛出错误 "noFallthroughCasesInSwitch": true, // 报告 switch 语句的 fallthrough 错误

    8110

    工作中经常遇到的前端九条 bug 分享

    3: 后端int64类型出错 公司内部有一个库可以把后端的rpc接口规范直接转成ts规范供前端使用, 但是突然有一天出现了类型错误, 比如后端规定返回参数为code数字类型, msg为字符串类型, 那么就会生成如下文件...4: 开发时候样式好好的, 打包后就出问题了 * bug 场景      明明开发时候好好的, 但为什么打包之后就会出现各种错误, 比如样式丢失, 这里说下原因之一: 很久之前的某天我把开发好的前端项目代码发布到了服务器上...与production两种模式下分别兼容到主流浏览器什么版本, 那这里其实就很可能是问题所在, 因为针对开发与打包进行了不同的翻译, 这就会导致无法预期的错误产生, 虽然已经不在那家公司了当年的代码已经找不到了...8: ts 修改函数参数 实现: 增加函数一个参数 假设当前我有这样一个type: type Obj = { getX: (a: string, c: boolean) => void;...infer是ts内置的关键字, 有点类似js的var, 他可以定义一个变量。

    86840

    全网最全的,最详细的,最友好的 Typescript 新手教程

    现在我们要记住,TypeScript是一种特殊的JavaScript,但在浏览器运行之前,它需要一个“转换器”。 TypeScript新手教程:为什么是TypeScript?...实际上,只要它能捕获代码严重和愚蠢的错误,您就会看到它的好处。更重要的是,您的代码库将变得结构良好,并且几乎是自文档化的。您还将欣赏编辑器改进的自动完成功能,但这只是一个不错的副作用。...any是一个“松散的”TypeScript类型。这意味着:这个变量可以是任何类型:字符串,布尔值,对象,真的,我不在乎。这实际上就像根本没有类型检查一样。...在这种情况下它会给出一个错误吗? 让我们看看:在下一节,我们将使用可变键使filterByTerm更加动态。 接口可以有索引 让我们回到filterByTerm。...幸运的是,TypeScript可以捕捉到这些错误,就像你在编辑器写的那样。

    6.1K40

    TypeScript-never和object类型、类型断言概述

    前言TypeScript 的 "never" 类型表示一个永远不会发生正常结束的函数返回值类型,通常在异常处理或无限循环中使用。这有助于标识代码的潜在问题和错误流程。"...它允许你定义具有不同属性和方法的对象,但无法访问对象的具体属性,因此谨慎使用,以避免类型错误。"never" 用于处理异常情况,而 "object" 用于通用的对象表示。...Never 类型表示的是那些永不存在的值的类型一般用于抛出异常或根本不可能有返回值的函数抛出异常function demo(): never { throw new Error("报错了");}demo...();不可能有返回值的函数function demo(): never { while (true) { }}demo();Object 类型表示一个对象let obj: object;//...会报错// obj = 123;obj = {name: "BNTang", age: 18};console.log(obj);类型断言概述TS 的类型断言和其它编程语言的 类型转换 很像,可以将一种类型强制转换成另外一种类型类型断言就是告诉编译器

    24020

    Python 工匠: 异常处理的三个好习惯

    “ 如果你用 Python 编程,那么你就无法避开异常,因为异常在这门语言里无处不在。打个比方,当你在脚本执行时按 ctrl+c 退出,解释器就会产生一个 KeyboardInterrupt 异常。...继续阅读前,我希望你已经了解了下面这些知识点: 1.异常的基本语法与用法 2.为什么要使用异常代替错误返回 3.为什么在写 Python 时鼓励使用异常 只做精准的异常捕获 假如你不够了解异常机制,就难免会对它有一种天然恐惧感...你会发现在编写函数时,我犯了一个错误,我把获取正则匹配串的方法错打成了 obj.grop(1),少了一个 'u'( obj.group(1))。...打个比方,如果你想让一个请求返回 404 状态码,那么只要在该请求处理过程执行 raiseHttp404 即可。 所以,我们很自然的从 Django 获得了灵感。...但在现实世界,如果你严格遵循这些流程,那么很有可能会碰上另外一个问题:异常处理逻辑太多,以至于扰乱了代码核心逻辑。

    74540

    如何做前端单元测试

    前端为什么需要单元测试? 必要性:JavaScript 缺少类型检查,编译期间无法定位到错误,单元测试可以帮助你测试多种异常情况。 正确性:测试可以验证代码的正确性,在上线前做到心里有底。...调查的另一个有趣的见解是,在大型组织单元测试更受欢迎。其中一个原因可能是,由于大型组织需要处理大规模的产品,以及频繁的功能迭代吧。这种持续的迭代方式,迫使他们进行自动化测试的投入。...: T) : T { const result = path.reduce((obj, key) => obj !== undefined ?...但是需要注意的是:我们必须使用一个函数将被测试的函数做一个包装,正如下面 getIntArrayWrapFn 所做的那样,否则会因为函数抛出错误导致该断言失败。.../src/utils/getIntArray'; test('getIntArray(3.3)应该抛出错误', () => { function getIntArrayWrapFn() {

    3.3K20

    TypeScript 快速入门

    抛出异常 这是一个隐患 而强类型的语言直接在语法层面上抛出错误 setTimeout(() => { obj.foo(); }, 1000); //如下 传递不同类型的参数 函数的作用就完全不同了...= {}; obj[true] = 100; console.log(obj['true']);//对对象索引器的错误用法 强类型的优势: 错误更早暴露 代码更智能,编码更准确 重构更牢靠 减少不必要的类型判断...TypeScript TypeScript解决JavaScript类型系统的问题,TypeScript大大提高代码的可靠程度 TypeScript 可以在任何一个JavaScript的运行环境中都支持...原始类型在TS的应用 /* 原始类型在TS的应用 */ const a:string = 'foo'; const b:number = 100;//NaN Infinity const c:...{} cache.foo = "value"; // cache.bar = 123;//报错 类 Class 类 描述一类事物的抽象特征 ES6以前通过 函数+原型来模拟的类 class 在ES6就添加了这一个特性

    1.6K10

    实现Vue3响应式系统核心-MVP 模型

    手把手带你实现一个 vue3 响应式系统,你将获得: Vue3 的响应式的数据结构是什么样?为什么是这样?如何形成的? Proxy 为什么要配合 Reflect 使用?如果不配合会有什么问题?...假设在一个副作用函数读取了某个对象的属性: const obj = { age: 18 } function effect() { console.log(obj.age) } 当 obj.age...在严格模式(strict mode)下,这会导致一个 TypeError 被抛出。 如果在 set 函数不返回任何值(或返回 undefined),那么默认情况下,它相当于返回 false。...在严格模式下,不返回 true 会导致抛出 TypeError 异常。...这是为什么呢? 我们来看一下 bucket 的收集结果:(你可以把这个 case 的内容直接放在 main.ts 运行一下,然后在浏览器查看) 很明显, 没有收集到 foo, 这是为什么呢?

    11910

    实现Vue3响应式系统核心-MVP 模型

    手把手带你实现一个 vue3 响应式系统,你将获得: Vue3 的响应式的数据结构是什么样?为什么是这样?如何形成的? Proxy 为什么要配合 Reflect 使用?如果不配合会有什么问题?...假设在一个副作用函数读取了某个对象的属性: const obj = { age: 18 } function effect() { console.log(obj.age) } 当 obj.age...在严格模式(strict mode)下,这会导致一个 TypeError 被抛出。 如果在 set 函数不返回任何值(或返回 undefined),那么默认情况下,它相当于返回 false。...在严格模式下,不返回 true 会导致抛出 TypeError 异常。...这是为什么呢? 我们来看一下 bucket 的收集结果:(你可以把这个 case 的内容直接放在 main.ts 运行一下,然后在浏览器查看) 很明显, 没有收集到 foo, 这是为什么呢?

    12710

    不废话的将ts一篇文章写完

    解释一下: ts全称typeScript,别名 anyScript , 是js的一个超集,你可以理解为js有的他都有,js没有的,他也有,后面会具体说到,js是一种非强类型语言,ts就相当于将js强制类型...元组定义 如果想在数组里面进行定义不同的类型,可以使用元组,元组在js本身是不存在的,ts存在的一种数据类型 let tuple: [number,string,boolean,null] = [...接口 ts的接口是用于限制对象的,他规定了对象的key和类型的最初的样子(属性【属性的类型】和方法【参数的类型和返回值的类型】的样子),接口本身是不参与运行的,他在编译期间起限制和静态类型检查的作用...id: 0, brand: "吉利", }; 接口限制之后对象是不可以添加或者赋值非该类型的数据,包括数量也会被限制,如下: 下面是一个错误示例 ⚠️ let obj: Iobj = {..."; let cls = "tom"; cls = 5; 不在联合类型的不可以定义 下面的是错误示例 ⚠️ cls = true // Error : Type 'boolean' is not assignable

    9810

    TypeScript基础知识

    = new Man('王五'); console.log('名字是' + obj.name); //名字是王五 obj.sayHi(); //Hi王五 类的继承:我们可以在创建类的时候继承一个已存在的类...;//不会打印内容 } never类型 表示永不存在的值类型,一般指总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式及函数执行无限循环的代码(死循环)的返回值类型。...使用泛型接口时,需要显式指定具体的类型,上述代码的KeyValue 实际上,JS的数组在TS中就是一个泛型接口,当我们在使用数组时,TS会根据数组的不同类型,来自动将类型变量设置为响应的类型..."noUnusedParameters": true, // 有未使用的参数时,抛出错误 "noImplicitReturns": true,...// 并不是所有函数里的代码都有返回值时,抛出错误 "noFallthroughCasesInSwitch": true, // 报告 switch 语句的 fallthrough 错误

    2.2K20

    【Vue】1979- 实现Vue3响应式系统核心-MVP 模型

    手把手带你实现一个 vue3 响应式系统,你将获得: Vue3 的响应式的数据结构是什么样?为什么是这样?如何形成的? Proxy 为什么要配合 Reflect 使用?如果不配合会有什么问题?...假设在一个副作用函数读取了某个对象的属性: const obj = { age: 18 } function effect() { console.log(obj.age) } 当 obj.age...在严格模式(strict mode)下,这会导致一个 TypeError 被抛出。 如果在 set 函数不返回任何值(或返回 undefined),那么默认情况下,它相当于返回 false。...在严格模式下,不返回 true 会导致抛出 TypeError 异常。...这是为什么呢? 我们来看一下 bucket 的收集结果:(你可以把这个 case 的内容直接放在 main.ts 运行一下,然后在浏览器查看) 很明显, 没有收集到 foo, 这是为什么呢?

    12610

    Python 工匠:异常处理的三个好习惯

    继续阅读前,我希望你已经了解了下面这些知识点: 异常的基本语法与用法(建议阅读官方文档 “Errors and Exceptions”) 为什么要使用异常代替错误返回(建议阅读《让函数返回结果的技巧》)...你会发现在编写函数时,我犯了一个错误,我把获取正则匹配串的方法错打成了 obj.grop(1),少了一个 'u'(obj.group(1))。...打个比方,如果你想让一个请求返回 404 状态码,那么只要在该请求处理过程执行 raise Http404 即可。 所以,我们很自然的从 Django 获得了灵感。...随着时间推移,项目也变得越来越庞大,抛出 APIErrorCode 的地方也越来越多。有一天,我正准备复用一个底层图片处理函数时,突然碰到了一个问题。...但在现实世界,如果你严格遵循这些流程,那么很有可能会碰上另外一个问题:异常处理逻辑太多,以至于扰乱了代码核心逻辑。

    60440

    三个好习惯,帮你写好Python里的异常处理

    转自:piglei 如果你用 Python 编程,那么你就无法避开异常,因为异常在这门语言里无处不在。...继续阅读前,我希望你已经了解了下面这些知识点: 异常的基本语法与用法(建议阅读官方文档 “Errors and Exceptions”) 为什么要使用异常代替错误返回(建议阅读《让函数返回结果的技巧》)...你会发现在编写函数时,我犯了一个错误,我把获取正则匹配串的方法错打成了 obj.grop(1),少了一个 'u'( obj.group(1))。...打个比方,如果你想让一个请求返回 404 状态码,那么只要在该请求处理过程执行 raiseHttp404 即可。 所以,我们很自然的从 Django 获得了灵感。...但在现实世界,如果你严格遵循这些流程,那么很有可能会碰上另外一个问题:异常处理逻辑太多,以至于扰乱了代码核心逻辑。

    1.2K20

    Python 工匠: 异常处理的三个好习惯

    ” 前言 如果你用 Python 编程,那么你就无法避开异常,因为异常在这门语言里无处不在。...继续阅读前,我希望你已经了解了下面这些知识点: 异常的基本语法与用法(建议阅读官方文档 “Errors and Exceptions”) 为什么要使用异常代替错误返回(建议阅读《让函数返回结果的技巧》)...你会发现在编写函数时,我犯了一个错误,我把获取正则匹配串的方法错打成了 obj.grop(1),少了一个 'u'( obj.group(1))。...打个比方,如果你想让一个请求返回 404 状态码,那么只要在该请求处理过程执行 raiseHttp404 即可。 所以,我们很自然的从 Django 获得了灵感。...但在现实世界,如果你严格遵循这些流程,那么很有可能会碰上另外一个问题:异常处理逻辑太多,以至于扰乱了代码核心逻辑。

    90030
    领券