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

深度讲解TS:这样学TS,迟早进大厂【03】:简单例子 helloworld

上述例子中,我们用 : 指定 person 参数类型 string。但是编译为 js 之后,并没有什么检查代码被插入进来。...这是因为 **TypeScript 只会在编译时对类型进行静态检查,如果发现有错误,编译时候就会报错。**而在运行时,与普通 JavaScript 文件一样,不会对类型进行检查。...如果我们需要保证运行时参数类型,还是得手动对类型进行判断: function sayHello(person: string) { if (typeof person === 'string'...string) { return 'Hello, ' + person; } let user = [0, 1, 2]; console.log(sayHello(user)); 编辑器中会提示错误...,编译时候也会出错: hello.ts:6:22 - error TS2345: Argument of type 'number[]' is not assignable to parameter

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

TypeScript学习笔记(四)—— TypeScript提高

一、类型type 1.1、定义 Type又叫类型别名(type alias),作用是一个类型起一个新名字,不仅支持interface定义对象结构,还支持基本类型、联合类型、交叉类型、元组等任何你需要手写类型...TypeScript 除了实现了所有 ES6 中功能以外,还添加了一些新用法。 这一节主要介绍类用法,下一节再介绍如何定义类类型。...此时针对某一个实例,我们无需了解它是 Cat 还是 Dog,就可以直接调用 eat 方法,程序会自动判断出来应该如何执行 eat 存取器(getter & setter):用以改变属性读取和赋值行为...参数属性 修饰符和readonly还可以使用在构造函数参数中,等同于类中定义该属性同时该属性赋值,使代码更简洁。...接着在调用时候,可以指定它具体类型 string。

2.4K10

深度讲解TS:这样学TS,迟早进大厂【19】:泛型

这段代码编译不会报错,但是一个显而易见缺陷是,它并没有准确定义返回值类型: Array 允许数组每一项都为任意类型。但是我们预期是,数组中每一项都应该是输入 value 类型。...接着在调用时候,可以指定它具体类型 string。...; } createArray(3, 'x'); // ['x', 'x', 'x'] 多个类型参数§ 定义泛型时候,可以一次定义多个类型参数: function swap(tuple:...泛型约束§ 在函数内部使用泛型变量时候,由于事先不知道它是哪种类型,所以不能随意操作它属性或方法: function loggingIdentity(arg: T): T { console.log...§ 在 TypeScript 2.3 以后,我们可以为泛型中类型参数指定默认类型

59730

现代JavaScript—ES6+中Imports,Exports,Let,Const和Promise

如何在JavaScript中使用let 当我们在用let声明变量时,用于声明一次之后就不能再以相同名称重新声明它。...因此,我们来看下他们区别。 const声明变量常量,其值是不能改变。...这样写会抛出异常,因为我们试图更改const变量指向引用。 因此,在使用const时要记住一点:使用const声明常量时,不能重新声明,也不能重新赋值。...当我们将一个变量声明为let时,我们不能在同一作用域(函数或块级作用域)中重新定义或重新声明另一个具有相同名称let变量,但是我们可以重新赋值。...,它实际是location参数赋一个空值,与undefined不一样。

3.2K10

ES6语法

const FOO=Object.freeze({a:1,b:2}) 冻结对象本身不能添加属性,不能修改属性类型 冻结数组本身不能添加元素,不能修改元素类型 //Object.keys(...c=3; 不注册变量成window属性 没有重复定义 数组解构赋值 按一定模式从数组或对象中提取值变量赋值叫做解构 模式匹配,等号左右两边模式相同,不能解构赋值undefined 部分匹配,左边变量少于右边数组...右边不是数组 表达式惰性求值,需要赋值时候执行表达式 对象解构赋值 let{a:a,b:b,c:c}={a:1,b:2,c:3}--模式和变量 对象解构赋值内部机制,是先找到同名属性,然后再赋值对应变量...回调函数 promise.then(function(value){ 成功操作 },function(error){ 失败操作 }) promise简单例子 setTimeout第三个参数第一个参数传参...返回结果,作为下一个thenresolve参数(链式调用) Promise.prototype.catch catch接收错误(promise错误,throwError,then错误) catch接收前面所有的错误

8710

2022高频前端面试题合集之JavaScript篇(中)

不能有重复参数名,函数参数不能有同名属性 不能使用with语句 不能对只读属性赋值 不能使用前缀 0表示八进制数 不能删除不可删除属性 eval 不会在它外层作用域引入变量。...「浅拷贝方法」 直接赋值 Object.assign 方法:可以把任意多个源对象自身可枚举属性拷贝目标对象,然后返回目标对象。...,若目标参数既不是object类型,也不是function类型,则为目标参数重新赋值 // Handle case when target is a string or something (...,且当前参数中name字段值存在且为object类型或Array类型,则进行深度赋值 // Recurse if we're merging plain objects...object return target; }; 166. async/await 如何捕获错误 参考答案: 可以使用 try...catch 来进行错误捕获 示例代码: async

2.2K10

手写 Promise

,就一起解析了 首先两个函数都得判断当前状态是否等待中,因为规范规定只有等待态才可以改变状态 将当前状态更改为对应状态,并且将传入赋值 value 遍历回调数组并执行 完成以上两个函数以后...,我们就该实现如何执行 Promise 中传入函数了 try { fn(resolve, reject) } catch (e) { reject(e) } 实现很简单,执行传入参数并且将之前两个函数当做参数传进去...) } if (that.state === REJECTED) { onRejected(that.value) } } 首先判断两个参数是否函数类型,因为这两个参数是可选参数...当参数不是函数类型时,需要创建一个函数赋值对应参数,同时也实现了透传,比如如下代码 // 该代码目前在简单版中会报错 // 只是作为一个透传例子 Promise.resolve(4)....,如果都不是的话,将 `x` 传入 `resolve` 中 如果 `x` 是对象或者函数的话,先把 `x.then` 赋值 `then`,然后判断 `then` 类型,如果不是函数类型的话,就将

35510

20道前端高频面试题(附答案)_2023-02-27

ES6新特性 1.ES6引入来严格模式 变量必须声明后在使用 函数参数不能有同名属性, 否则报错 不能使用with语句 (说实话我基本没用过) 不能对只读属性赋值, 否则报错...[prop] eval不会在它外层作用域引入变量 eval和arguments不能被重新赋值 arguments不会自动反映函数参数变化 不能使用arguments.caller...Promise实例 5、finally方法不管Promise状态如何都会执行,该方法回调函数不接受任何参数 6、Promise.all()方法将多个多个Promise实例,包装成一个新Promise...typeof 其中数组、对象、null都会被判断Object,其他判断都正确 instanceof 只能判断引用数据类型,不能判断基本数据类型 constructor 它有2个作用 一是判断数据类型...需要注意事情是如果创建一个对象来改变它原型,constructor就不能来判断数据类型Object.prototype.toString.call() Number() 存储空间是多大?

87120

几个一看就会 TypeScript 小技巧

所以 number 就可以赋值 {}、Object 类型,但是不能赋值 object 类型: 其实,你看源码会发现大家不会用 object 来约束,而是用 Record 创建了一个 key 任意 string,value 任意类型索引类型: 所以,平时约束索引类型时候就可以用 Record 代替...类型定义就用到这个了: 类型参数 T 是 待处理 promise 数组,返回值是 Promise value 对应数组,用 Awaited 取出 value 类型。...但是方法也可以用 call 或者 apply 调用: call 调用时候,this 就变了,但这里却没有被检查出来 this 指向错误如何让编译器能够检查出 this 指向错误呢?...object 不能接收原始类型,而 {} 和 Object 都可以,这是它们区别。

2K10

TypeScript手记(一)

person 函数参数添加 : string 类型注解,如下: 1function greeter (person: string) { 2 return 'Hello, ' + person...3} 4 5let user = 'Yee' 6 7console.log(greeter(user)) TypeScript 里类型注解是一种轻量级函数或变量添加约束方式。...user = [0, 1, 2] 6 7console.log(greeter(user)) 重新编译,你会看到产生了一个错误: error TS2345: Argument of type 'number...在这两种情况中,TypeScript提供了静态代码分析,它可以分析代码结构和提供类型注解。 要注意是尽管有错误,greeter.js 文件还是被创建了。...就算你代码里有错误,你仍然可以使用 TypeScript。但在这种情况下,TypeScript 会警告你代码可能不会按预期执行。 接口 接口可以理解一种规范。 让我们继续扩展这个示例应用。

62010

腾讯前端二面面试题(附答案)

; }}const resolvePromise = (promise2, x, resolve, reject) = > { // 自己等待自己完成是错误实现,用一个类型错误,结束掉 promise...Promise.resolvePromsie.resolve(value) 可以将任何值转成值 value 状态是 fulfilled Promise,但如果传入值本身是 Promise 则会原样返回它...规则是这样:空数组或者所有 Promise 都是 rejected,则返回状态是 rejected 新 Promsie,且值 AggregateError 错误;只要有一个是 fulfilled...根据这个原理,我们使用HTML5 data-xxx属性来储存图片路径,在需要加载图片时候,将data-xxx中图片路径赋值src,这样就实现了图片按需加载,即懒加载。...所以当图片出现在可视区域时,获取图片真实地址并赋值图片即可。

1K30

【One by one系列】一步步学习TypeScript

增加了静态类型、类、模块、接口和类型注解,编译阶段就能检查错误 TypeScript 可用于开发大型应用,也是由于上面的优势点,所以才有此优势,项目一大就需要考虑可维护性 想弯道超车吗!?...8.tsconfig.json 8.1.概述 tsconfig.json文件存在目录,即为TypeScript项目的根目录 tsconfig.json文件中指定了用来编译项目的根文件和编译参数选项...不带任何输入文件,tsc,且使用命令行参数 --project(或p)指定一个包含tsconfig.json文件目录。...【ps】"ES6"和 "ES2015"可使用在目标输出 "ES5"或更低情况下。...使用"include"引入文件可以使用"exclude"属性过滤。然而,通过 "files"属性明确指定文件却总是会被包含在内,不管"exclude"如何设置。

59720

什么是 TypeScript 4.1 中模板字面类型

, onFulfilled: (value: Awaited) => U ): Promise>; 但是应当注意是,TypeScript 需要更多时间来进行递归类型类型检查...Promise 中 resolve 参数不再是可选类型 Promise 中 resolve 参数不再是可选,例如下面的代码: new Promise((resolve) => { doSomethingAsync...要解决这个问题,必须在 Promise resolve 提供至少一个值,否则,在确实需要不带参数情况下调用 resolve() 情况下,必须使用显式 void 泛型类型参数声明 Promise...解决方法是,最好使用类型断言来避免错误。 最后一点想法 TypeScript 通过在运行代码之前捕获错误并提供修复程序来节省我们时间。...通过深入了解 TypeScript,我们可以更好地了解如何改善代码结构,并得到解决复杂问题方案。希望本文能够帮助你探索类型系统,并使您编程旅程更加精彩。

3.9K10

ES6知识点补充

2、const声明变量不能改变,如果声明是一个引用类型,则不能改变它内存地址(这里牵扯到JS引用类型特点,有兴趣可以看我另一篇博客对象深拷贝和浅拷贝) ?...,读取所有迭代器value属性,剩余/扩展运算符后不能在有解构赋值,因为剩余/扩展运算符已经消耗了所有迭代器,而数组解构赋值也是消耗迭代器,但是这个时候已经没有迭代器了,所以会报错 ?...可以看到只要满足第二个条件(iterator.next()存在且res.donetrue)就可以一直循环下去,并且每次把迭代器next方法生成对象赋值res,然后将resvalue属性赋值for...Object.definePropery 提到Proxy就不得不提一下ES5中Object.defineProperty,这个api可以一个对象添加属性以及这个属性属性描述符/访问器(这2个不能共存...2}将属性b和值数字2赋值target对象 这里罗列了一些这个API需要注意知识点 1、Object.assign是浅拷贝,对于值是引用类型属性拷贝扔是它引用 2、对于Symbol属性同样可以拷贝

1.1K50

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券