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

TS 如何处理特殊值

1.1 添加 null 或 undefined 到类型 TypeScript null 是一个很好的哨兵值,我们可以通过类型联合将其对应的 null 类型添加到新的类型: // 这里的null...二、可辨识联合类型 可辨识联合类型是指多个对象类型至少含有一个通用的属性。对于每个对象类型,该属性必须具有不同的值 —— 我们可以将其视为对象类型的 ID。...A 行已经进行了检查,所以 B 行我们能够访问 value 变量的 data 属性,该属性只存在于 NormalValue 类型的变量。...三、迭代器的结果 决定如何实现迭代器时,TC39 也不能使用固定的哨兵值。因为该值可能会出现在可迭代项和中断代码。一种解决方案是开始迭代时选择哨兵值。...对 TS 类型保护感兴趣的小伙伴,可以阅读一下 “ TS 如何实现类型保护?类型谓词了解一下” 这篇文章。

2.4K10

void JS 和 TS 的区别

// 每日前端夜话 第588 篇 // 正文共 1200 字 // 预计阅读时间:7 分钟 如果你用过传统的强类型语言,可能会很熟悉 void 的概念:一种类型,告诉你函数和方法调用时不返回任何内容...void 作为运算符存在于 JavaScript ,而作为基本类型存在于 TypeScript 。在这两个世界,void 的工作机制与大多数人习惯的有点不同。...iHaveNoReturnValue(i) { console.log(i) } // returns undefined 因为没有返回值的函数总是返回 undefined,而 void 总是.../c 也是 undefined 类型 } // 这个函数返回一个 number function aNumberCallback(): number { return 2; } // 有效 ...你可以我的其他文章阅读更多关于这种被称为 substitutability 的模式。

3.9K20

ts + Jest 单元测试 debugging

温馨提示:因微信中外链都无法点击,请通过文末的 “阅读原文” 到技术博客完整查阅版; 本文简要介绍了如何在 Jest 单元测试利用 Chrome Node DevTools 来辅助调试 1、背景 代码是...TS 写的 所测功能无 UI 界面,且出现 bug 初步定位到是循环体内部问题,功能较为复杂 用 console 式 debug 效率太低,需要打断点式调试 Jest 单测中进行 debugger...Chrome Node DevTools 刚开始我用 VSCode 的 Debugger 功能, TS 源码进行 debugger 时候,发现在源码上打断点无法准确定位: ?...2、步骤 认为可能失败并输入的测试插入一个 debugger。...Jest:简要总结了用 Chrome 调试和 VSCode 调试,本文所用的 Chrome 调试 就是通过这篇文章学会的 debugging-jest-tests:微软官方仓库给出的 VScode

3.9K30

对象解构与迭代器的猫腻?

前言变量的解构赋值是前端开发中经常用到的一个技巧,比如:_// 对象解构_const obj = { a: 1, b: 2 };const { a, b } = obj;console.log(a, b...)数组解构const arr = [1, 2, 3];const [a, b] = arr;console.log(a, b)工作我们最经常用的就是类似上面的对象和数组解构,好多同学就不禁问了,这个不是很简单吗...可迭代协议 必须有这么一个属性:Symbol.iterator,一个无参数的函数,其返回值为一个符合 可迭代协议 的对象,即迭代器。数组解构数组可以解构,因为数组是一个可迭代对象。...a = iter.next().value;const b = iter.next().value;console.log(a, b)对象解构那么问题来了,对象身上没有 Symbol.iterator...因为对象解构过程是这样的:创建对象 -> 枚举属性(OwnPropertyKeys) -> 复制属性,跟迭代器没关系。

8610

解构造函数与原型对象

越来越像后端语言,Es6,Es7新增的诸多方法也越来越强大,但是我觉得理解构造函数与原型对象还是有必要的,是js面向对象编程的基础,今天就我的学习和使用跟大家分享一下学习心得,初学者学习笔记心得,欢迎路过的老师多提意见和指正...,使用这些数据去完成预定的操作 函数是一等公民,是对象,是值,可以存储一个变量,数组或者对象 函数可以传递给函数,并由函数返回,函数拥有属性 函数总有返回值(换句话说就是有return语句,当然构造器函数除外...,提醒你创建实例化对象前加new操作符) 当函数没有被new调用时,构造函数的this就能与全局this对象(即window) 示例代码如下所示: // 声明函数 function Animal(name...(对象)下面的方法和属性,,让公用方法或者属性在内存存在一份,解决了当创建多个实例化对象时,重复的创建构造函数的过程,目的是减少内存开销,提高性能,还有就是原型原有的对象基础上,通过prototype...原型对象,prototype,函数一旦声明,就有该属性,作用1:去改写对象下面公用的方法或者属性,让公用方法或者属性在内存存在一份,可以看作是对象的基类 作用2:原有的对象基础上上,通过prototype

1.1K40

深度讲解TS:这样学TS,迟早进大厂【13】:内置对象

TS系列地址: 21篇文章带你玩转ts 内置对象 JavaScript 中有很多内置对象,它们可以直接在 TypeScript 当做定义好了的类型。...内置对象是指根据标准全局作用域(Global)上存在的对象。这里的标准是指 ECMAScript 和其他环境(比如 DOM)的标准。...TypeScript 核心库的定义文件§ TypeScript 核心库的定义文件定义了所有浏览器环境需要用到的类型,并且是预置 TypeScript 的。...当你使用一些常用的方法的时候,TypeScript 实际上已经帮你做了很多类型判断的工作了,比如: Math.pow(10, '2'); // index.ts(1,14): error TS2345...上面的例子,addEventListener 方法是 TypeScript 核心库定义的: interface Document extends Node, GlobalEventHandlers

62230

TStype和interface类型声明时的区别

TStype和interface类型声明时的区别在TSinterface 和 type都可以用来自定义数据类型,两者有许多相同之处,但是也有差别。...我们一般选择 type 来定义基本类型别名、联合类型、元组等类型,而选择 interface 来定义复杂的对象、类、以及进行接口的继承。1....(2)定义函数类型type Greeting = (name: string) => string;interface Greeter { (name: string): string;}(3)定义对象类型...所以需要定义一个可以被类实现的类型时,应该使用 interface 进行定义。... TypeScript 3.7 版本之后,type 也可以实现声明合并和继承多个类型的功能,因此选择使用 interface 还是 type 时,应该根据具体情况来决定。

28520

TS的函数

前言 我们上一篇内容简单的介绍了判断语句以及循环语句,今天我们一起来学习一下TS的函数,除此之外我还会再介绍两个和函数相关的配置。...它除了写法不同之外和普通的函数使用上没有什么太大的差别。...const my_result = calculator(2, 2, "*"); console.log(my_result); =>箭头符号函数的使用 匿名函数我们省略了函数名,我们甚至还可以省略...我们再尝试函数内部加入一个多余的变量。 可以看到它也有提示,这样当我们写大量函数时就可以避免出现多余的形成或者多余的局部变量了。...总结 今天我们一起学习了如何在TS编写函数,并修改了一下编译配置文件。希望对你能有所帮助。 今天的内容就是这些了,我是Tango,一个热爱分享技术的程序猿我们下期见。

17010

JavaScript 如何克隆对象

name="王大冶"; console.log (name,name2); // 王大冶 前端小智 引用值 但是,如果我们对引用类型的值进行相同的操作,则我们对一个变量所做的任何更改也将反映在另一个变量,...若要克隆对象,请使用 Object.assign() 方法,该方法会将一个或多个源对象的所有可枚举属性的值复制到目标对象,但是此方法仅对对象的一个浅拷贝。...此方法对简单对象有效,但如果对象属性是函数时无效。...我们创建了一个deepClone(object)函数,将想要克隆的对象作为参数传递给它。函数内部,将创建一个局部变量克隆,这是一个空对象,其中将从起始对象克隆的每个属性都将添加到该对象。...具体思路: 如果该属性不是对象,则将其简单地克隆并添加到新的克隆对象

4.6K20

ES6面试点-对象解构赋值

var a, b; ({a, b} = {a: 1, b: 2}); 注意 赋值语句周围的圆括号 ( ... ) 使用对象字面量无声明解构赋值时是必须的。...下面代码,等号左边对象的foo属性,对应一个子对象。该子对象的bar属性,解构时会报错。原因很简单,因为foo这时等于undefined,再取子属性就会报错。...// 报错 let {foo: {bar}} = {baz: 'baz'}; 对象解构赋值可以取到继承的属性 下面代码对象obj1的原型对象是obj2。...解构赋值的规则是,只要等号右边的值不是对象或数组,就先将其转为对象。由于undefined和null无法转为对象,所以对它们进行解构赋值,都会报错。...function add([x, y]){ return x + y; } add([1, 2]); // 3 上面代码,函数add的参数表面上是一个数组,但在传入参数的那一刻,数组参数就被解构成变量

50450
领券