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

4000字讲清 《深入理解TypeScript》一书 【基础篇】

Type类型的约束、不确定情况下的提示、在代码编写阶段就能知道自己的错误 这三点我认为是最关键的点,本身TypeScript能做的事情,JavaScript都能做,虽然使用TS要多写很多代码,但是其实真正算下来...有了以上假设,从 JavaScript 迁移,总的来说包括以下步骤: 添加一个 tsconfig.json文件; 把文件扩展名从 .js 改成 .ts,开始使用 any 来减少错误; 开始在 TypeScript...也就是说,把文件扩展名从 .js 改成 .ts 将不会造成任何负面的影响。...几乎排名前 90% 的 JavaScript 库的声明文件存在于 DefinitelyTyped 这样一个仓库里,在创建自己定义的声明文件之前,我们建议你先去仓库中寻找。...WARNING 请注意,这种错误提示,只会发生在对象字面量上 允许分配而外的属性: 一个类型能够包含索引签名,以明确表明可以使用额外的属性: let x: { foo: number, [x: string

1.9K30

重读《学习JavaScript数据结构与算法-第三版》-第2章 ECMAScript与TypeScript概述

引用类型值:指向了一个内存地址,该内存地址中存储的是一个指针,一个指向实际数据的指针。 const保证的是这个指针是固定的,总是指向另一个固定地址;但实际上指针指向的数据结构是否可变,则不能控制。...目的是让开发者增强JavaScript的能力并使应用的规模扩展变得更容易。 TS在JavaScript中提供类型支持可以实现静态检查,从而更容易地重构代码和寻找BUG。...编写时为.ts文件,使用TypeScript对其进行tsc编译,最终为js文件 下载TypeScript npm i -g typescript 创建.ts文件,写入内容 // demo.ts let...a = '初始化为字符串内容' a = 10 console.log(a) 编译ts文件 tsc demo.ts 此处回生成demo.js文件,同时控制台报警告信息:error TS2322: Type...接口 在TS中,有两种接口概念: 第一种:给变量设置类型,是对一个对象必须包含的属性和方法的描述 interface Person { age: number, name: string }

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

    9102年,隔壁公司新来的女实习生问我什么是TypeScript ?

    所谓的超集 其实就是最终将你写的TypeScript编译成javascript去执行,因为浏览器上能跑的脚本语言是javascript,这个本质要搞清楚 传统的Javascript 缺点: 1.弱类型,...3.不依赖插件,没有静态类型以及上下文检查 特别是在书写Node.js的时候,往往这种偏后台类型的代码,高并发场景出现一个小问题都是致命的,如果是一个超大型项目,排查问题起来非常困难 传统的javascript...这里特别注意,TS里面的静态类型,以及枚举等,编译成js后是不存在的 上面并没有体现typeScript的特殊价值 TypeScript的核心原则之一是对值所具有的结构进行类型检查。...编译后代码量并没有增加 TS给我们带来了什么麻烦 多写了很多接口,类型,一些快速开发的小项目感觉用上更麻烦。如果是比较古老的js插件第三方库,还用不了,要另想其他办法去支持。...大型项目,可以上ts,还是要上ts,中小型项目,看工期,看你是否打算在时间允许情况下尝试使用ts。 技术本身没有好坏,长远看,弱类型语言并不是那么的友好。

    71820

    TypeScript 常用知识总结

    TypeScript 设计目标是开发大型应用,它可以编译成纯 JavaScript,编译出来的 JavaScript 可以运行在任何浏览器上。...JavaScript 代码可以在无需任何修改的情况下与 TypeScript 一同工作,同时可以使用编译器将 TypeScript 代码转换为 JavaScript。...TypeScript 引入了命名空间 TypeScript 的优势 静态输入: 静态类型化是一种功能,可以在开发人员编写脚本时检测错误。查找并修复错误是当今开发团队的迫切需求。...有了这项功能,就会允许开发人员编写更健壮的代码并对其进行维护,以便使得代码质量更好、更清晰。 大型的开发项目: 有时为了改进开发项目,需要对代码库进行小的增量更改。...tsc ts-hw.ts --declaration ,以上命令会生成 ts-hw.d.ts、ts-hw.js 两个文件。

    1.8K30

    TypeScript 4.2 正式发布:更智能的类型别名保留,声明缺失的帮助函数,还有许多破坏性更新

    当你需要的时候,你的类型可以被剥离出来,留下干净的、可读的、可运行的 JavaScript,可以在任何地方运行。你可以 访问我们的网站,了解更多关于 TypeScript 的信息。...标记 逻辑表达式中改进的未调用函数检查 解构变量可以显式标记为未使用 可选属性和字符串索引符号之间的宽松规则 声明缺失的帮助函数 破坏性更新 更智能的类型别名保留 TypeScript 有一种为类型声明新名称的方法...能够根据你在代码中使用它们的方式来打印类型,意味着作为一名 TypeScript 用户,你可以避免显示一些非常庞大的类型,这通常会转化为更好的.d.ts文件输出、异常信息和编辑器中的快速信息和符号帮助中的类型显示...JavaScript 中的类型参数不被解析为类型参数 JavaScript 中已经不允许使用类型参数,但是在 TypeScript 4.2 中,解析器将以更符合规范的形式解析它们。...的 API 来解析 JavaScript 文件中的类型构造(在尝试解析 Flow 文件时会发生),这可能会对你有所影响。

    3.2K20

    盘点前端面试常见的15个TS问题,你能答对吗?

    Typescript 是 JavaScript 的超集,可以被编译成 JavaScript 代码。 用 JavaScript 编写的合法代码,在 TypeScript 中依然有效。...TS 在开发时就能给出编译错误, 而 JS 错误则需要在运行时才能暴露。 作为强类型语言,你可以明确知道数据的类型。代码可读性极强,几乎每个人都能理解。 TS 非常流行,被很多业界大佬使用。...可以通过this(和java/C#一样代表对象实例的成员访问)关键字来访问当前类体中的属性和方法。 8 实例化是什么?...实例化后通过“.”来访问属性和方法 9 方法重写是什么? 子类可继承父类中的方法,而不需要重新编写相同的方法。...拥有 never 返回值类型的函数无法正常返回,无法终止,或会抛出异常。 15 TS的学前基础? 因为 TypeScript 是对 JavaScript 的扩展,更准确的说是 ECMAScript。

    3.5K40

    学会这15个TS面试题,拿到更高薪的offer

    Typescript 是 JavaScript 的超集,可以被编译成 JavaScript 代码。 用 JavaScript 编写的合法代码,在 TypeScript 中依然有效。...TS 在开发时就能给出编译错误, 而 JS 错误则需要在运行时才能暴露。 作为强类型语言,你可以明确知道数据的类型。代码可读性极强,几乎每个人都能理解。 TS 非常流行,被很多业界大佬使用。...但是TS 最终不可能取代 JS,因为 JS 是 TS 的核心。 选择 TypeScript 还是 JavaScript 要由开发者自己去做决定。如果你喜欢类型安全的语言,那么推荐你选择 TS。...实例化后通过“.”来访问属性和方法 9 方法重写是什么? 子类可继承父类中的方法,而不需要重新编写相同的方法。...拥有 never 返回值类型的函数无法正常返回,无法终止,或会抛出异常。 15 TS的学前基础? 因为 TypeScript 是对 JavaScript 的扩展,更准确的说是 ECMAScript。

    3.7K50

    实战 Creator 2.x 项目升级 3.x!避坑要点与基础 API 写法差异总结

    升级引擎到 2.4.x 如果你是 2.4.x 以下的老项目,建议先将项目升级到 2.4.x 最新引擎版本。 如果有出现警告什么的,可以暂时不管他,引擎会提示你那些方法、属性废弃了,用什么接口去替换。...但是,如何找到之前使用的 js 脚本,在那些地方使用过呢?看下图: 在资源管理器中,鼠标右键选中脚本文件,在菜单中点击找查使用可以找到资源使用过的场景和预制体。...在这里分享一个小技巧,在层级管理器的搜索栏中输入:t:组件名字 就出来了! 然后你就可以,将新的 ts 脚本挂到节点上,并照之前 js 组件属性值,配置 ts 组件参数了。...ts 组件属性设置完后,将 js 版的组件移除,进行测试。这样操作,可以最大程度保证项目与之前逻辑一致,不容易出问题。...编写代码时,并不需要我们手动一个个敲import引入的模块,看下面: 脚本中首次使用引擎模块时,它会自动 import 的,如果你有出现上面招数不灵,可以尝试通过 3.x 引擎主菜单开发者→Export.d.ts

    2.7K30

    为什么选择使用 TypeScript ?

    TypeScript 的特点 类型系统 众所周知 JS 是一门弱类型语言,不到执行时都不能确定变量的类型。编码时可以随心所欲反正不报错,一不小心就写出八哥( undefined 警告!)。 1....可以发现目前大多数第三方 JavaScript 库都有声明文件,声明文件让这些库在代码编辑器中也可以拥有类型检查智能提示等特性,使用体验 Max 。...我们甚至可以声明一些环境中不存在的类型,例如我在《微信小游戏接入好友排行榜》这篇文章中编写的 wx.d.ts 文件,使得我在编辑器环境中调用根本不存在的 wx 函数时不会报错且有智能提示。...自带枚举类型,所以在 TS 脚本中可以直接 enum 来定义枚举,而在 JS 脚本中需要用 cc.Enum 来定义枚举。...在 Creator 项目中可以混用 JS 和 TS 脚本,也能享受到 TS 到来的福利。也就是说原有的 JS 脚本可以保留,不影响后续添加新的 TS 脚本。

    2.4K30

    rollup从0到1

    因为需要使用到 ts, 模块化,所以就存在模块编译打包的问题, 现有的打包工具中,webpack , Parcel 更偏向多类型资源 的web应用打包, 对于纯粹的npm工具包来说 rollup 更简单实用...概述 Rollup 是一个 JavaScript 模块打包器,可以将小块代码编译成大块复杂的代码,例如 library 或应用程序。...Rollup 对代码模块使用新的标准化格式,这些标准都包含在 JavaScript 的 ES6 版本中,而不是以前的特殊解决方案,如 CommonJS 和 AMD。...ES6 模块可以使你自由、无缝地使用你最喜爱的 library 中那些最有用独立函数,而你的项目不必携带其他未使用的代码。...-n 模块名称 -m 开启sourcemap 使用配置文件 rollup.config.js 在根目录新建文件rollup.config.js , 使用 -c 命令设置rollup配置的文件路径。

    2.1K10

    为什么选择 TypeScript

    另外在 ES6 中 JS 已经支持静态函数,在 ES7 中也加入了对静态属性的支持。...可以发现目前大多数「第三方 JavaScript 库」都有声明文件,声明文件让这些库在代码编辑器中也可以「拥有类型检查智能提示等特性」,使用体验 Max 。...我们甚至可以「声明一些环境中不存在的类型」,例如我在《微信小游戏接入好友排行榜》这篇文章中编写的 wx.d.ts 文件,使得我在编辑器环境中调用根本不存在的 wx 函数时不会报错且有智能提示。...({ extends: cc.Component, }); 声明属性 在 TypeScript 脚本中需要使用装饰器 「@property」 来声明属性,基本类型可以不传参数(参数和使用 JavaScript...自带枚举类型,所以在 TS 脚本中可以直接 enum 来定义枚举,而在 JS 脚本中需要用 cc.Enum 来定义枚举。

    1.7K00

    熬夜准备的一个React项目升级Vite的指南

    为此,为了让大家少踩坑,我先把china-dev.cn这个网站项目升级到了vite 对于在线画图功能,可能没有什么影响,但是跟在线编写javascript这个功能影响挺大,因为之前使用的库,会跟webpack.../JinJieTan/Peter-/tree/master/vite-react-ts-antd 将你的src源码目录植入我的项目模板中 项目根目录执行yarn安装依赖 index.hmtl入口文件,我这里默认是去加载...src/index.tsx文件 执行 yarn dev, 启动项目 ,如果此时你的代码没问题,已经run起来了(我项目中默认是react17.x,ts4.x版本,如果需要降级,请你安装指定依赖) 脚手架说明...js文件,后面我删除后就解决了这个问题。...,可以优先取default属性,如果取不到,就取默认的 写在最后 看得再多,不如直接动手实践,克隆我这个模板下来试试把。

    1.3K20

    数栈技术分享前端篇:TS,看你哪里逃~

    JavaScript 的超集,它具有可选的类型,并可以编译为纯 JavaScript 运行。...经典自问自答环节——因为它可以解决一些 JS 尚未解决的痛点:1、JS 是动态类型的语言,这也意味着在实例化之前我们都不知道变量的类型,但是使用 TS 可以在运行前就避免经典低级错误。...规范方便,又不容易出错,对于 VS Code,它能做的最多只是标示出有没有这个属性,但并不能精确的表明这个属性是什么类型,但 TS 可以通过类型推导/反推导(说白话:如果您未明确编写类型,则将使用类型推断来推断您正在使用的类型...的断言 1)类型断言不是类型转换,断言成一个联合类型中不存在的类型是不允许的。...TS的基础应用和Hook中的TS做了一些思考,但关于关于TSC如何把TS代码转换为JS代码的内容,这个部分比较冗长,后续可以单独出一篇文章(2)来专门探索。

    2.7K10

    还学的动吗? 盘点下Vue.js 3.0.0 那些让人激动的功能

    代码优化(Tree-shaking) 在Vue.js 3.0.0中,提供了“摇树”支持,即通过"摇"我们的JS文件,将其中用不到的代码"摇"掉。 ?...(图片来源于网络) 具体来说,在 webpack 项目中,有一个入口文件,相当于一棵树的主干,入口文件有很多依赖的模块,相当于树枝。在实际情况中,虽然依赖了某个模块,但其实只使用其中的某些功能。...这种方法最大的缺点是:它本身并不是一个标准的JavaScript代码。因此,您需要确切地知道模板中可以访问哪些属性以及this关键字的行为。在底层,Vue编译器需要将此属性转换为标准代码。...即使你用的是JS,你仍然可以得到参数的提示、类型声明,甚至可以跳进类型声明中去看源码, TS与JS在代码和API之间没有太大区别。并且,目前如果你喜欢使用Class组件,它仍受支持。...2.x系列会有最后一次小版本更新 作为可能是Vue 3.x版本正式发行之前的2.x系列的最后一个小版本更新。它将从3.0.0版本向后移植兼容,并加上在3.0.0删除的功能显示相应的弃用警告。

    1.3K20

    数栈技术分享前端篇:TS,看你哪里逃~

    JavaScript 的超集,它具有可选的类型,并可以编译为纯 JavaScript 运行。...经典自问自答环节——因为它可以解决一些 JS 尚未解决的痛点:1、JS 是动态类型的语言,这也意味着在实例化之前我们都不知道变量的类型,但是使用 TS 可以在运行前就避免经典低级错误。...规范方便,又不容易出错,对于 VS Code,它能做的最多只是标示出有没有这个属性,但并不能精确的表明这个属性是什么类型,但 TS 可以通过类型推导/反推导(说白话:如果您未明确编写类型,则将使用类型推断来推断您正在使用的类型...的断言 1)类型断言不是类型转换,断言成一个联合类型中不存在的类型是不允许的。...TS的基础应用和Hook中的TS做了一些思考,但关于关于TSC如何把TS代码转换为JS代码的内容,这个部分比较冗长,后续可以单独出一篇文章(2)来专门探索。

    2K30

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

    别名条件与判别式的控制流分析 在 JavaScript 当中,我们往往需要以不同的方式探测同一变量,查看它是否有我们可以使用的具体类型。...同样的,我们也可以使用模板客串模式类型编写索引签名。这种作法常见于筛选操作,例如在 TypeScript 的多余属性检查中剔除一切以 data- 开头的属性。...但您也可能在 TypeScript 4.4 上遇到如下错误: 类型'unknown'上不存在属性'message'。 类型'unknown'上不存在属性'name'。...类型'unknown'上不存在属性'stack'。 如果我们不想在 catch 子句中处理 unknown 变量,则可以始终添加明确的 : any 注释以声明不使用更严格的类型。...这通常会引发发下错误提示: 类型'unknown'上不存在属性'message'。 类型'unknown'上不存在属性'name'。 类型'unknown'上不存在属性'stack'。

    2.6K20

    将React项目从webpack升级到Vite

    对于在线画图功能,可能没有什么影响,但是跟在线编写javascript这个功能影响挺大,因为之前使用的库,会跟webpack绑定,目前不支持vite,于是我更换了技术栈,但是效果反而更好了~,这说明,跟...vue3已经不支持ie11,替换国内老旧系统只是时间而已,这是一个大趋势,深圳官方的一些网站已经开始推荐你使用新的浏览器了~ 规范你的代码,不能出现typescript的类型错误等和其他警告等,vite.../JinJieTan/Peter-/tree/master/vite-react-ts-antd 将你的src源码目录植入我的项目模板中 项目根目录执行yarn安装依赖 index.hmtl入口文件,我这里默认是去加载...src/index.tsx文件 执行 yarn dev, 启动项目 ,如果此时你的代码没问题,已经run起来了(我项目中默认是react17.x,ts4.x版本,如果需要降级,请你安装指定依赖) ?...vite的prod模式构建,是通过tsc转换成js后,再通过rollup进行打包,但是先yarn build后,就会在tsx附近产生js文件,例如: ?

    3.2K30

    检查JavaScript文件_TypeScript笔记18

    写在前面 TypeScript 的类型检查不仅限于.ts,还支持.js 但为了确保文件内容只含有标准的 JavaScript 代码,.js文件按照 ES 语法规范来检查,因而不允许出现 TypeScript...忽略类型错误 这些注释提供了更细粒度的类型检查控制,比如只想检查部分.js文件的话,可以不开启--checkJs选项,仅在部分.js文件首行添上// @ts-check注释 二.类型标注方式 .js文件里通过...number; [x: string]: any } = { a: 1 }; obj.b = 2; 同样,在 JavaScript 也可以通过 JSDoc 标明其确切类型: // .js /** @type...命名空间推断 Class 成员赋值推断 .ts里通过类成员声明中的初始化赋值来推断实例属性的类型: // .ts class Counter { x = 0; } // 推断 x 类型为 number...对于没在构造函数中定义,或者构造函数中类型为undefined或null(此时为any)的属性,其类型为所有赋值中右侧值类型的联合 定义在构造函数中的属性都认为是一定存在的,其它地方(如成员方法)出现的都当作可选的

    2.4K50

    TypeScript

    #类型断言 类型断言(Type Assertion)可以用来手动指定一个值的类型。 #什么是断言 有些情况下 TS 并不能正确或者准确得推断类型,这个时候可能产生不必要的警告或者报错。...当我们向 window 添加一个 foo 时,会报错示我们 window 上不存在 foo 属性。...当然,现在的编译器足够聪明,调用的时候可以不传递类型,编译器可以自己识别的 传递类型时,这个类型在函数中使用时的方法/属性,必须是存在的,或者继承自某个接口。...这里我有意使用不同的变量名,以表明类型值沿链向上传播,且与变量名无关。 #泛型约束 确保属性存在 当我们在函数中获取length属性,在类型为number时,是没有length的,所以会报错。...length属性 return arg; } 检查对象上的键是否存在 先认识 keyof 操作符 #泛型参考文章 掘金-一文读懂 TypeScript 泛型及应用( 7.8K字) #tsconfig.json

    1.8K10

    TypeScript 官方手册翻译计划【一】:基础

    举个例子,看下面的函数: function fn(x){ return x.flip() } 复制代码 从代码可以看出,仅当存在一个带有 flip 属性的对象时,这个函数才可以正常运行,但 JavaScript...也许你会觉得这是“理所当然的”,并且你会觉得,访问对象上不存在的属性时,也会抛出一个错误。但恰恰相反,JavaScript 的表现和我们的预想不同,它返回的是 undefined。...这很好,但更关键的是,它能够在一开始就防止我们的代码出现错误。 类型检查器可以通过获取的信息检查我们是否正在访问变量或者其它属性上的正确属性。同时,它也能凭借这些信息提示我们可能想要访问的属性。...在当前目录下,除了 hello.ts 文件外还有一个 hello.js 文件,而后者是 tsc 通过编译得到的纯 JavaScript 文件。...目前为止,我们编写的仍然是标准的 JavaScript 代码,但类型检查依然可以发现我们代码中的问题。感谢 TypeScript!

    92010
    领券