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

在 Vue 中使用 TypeScript 的一些思考(实践)

特别是当你使用 Vue.extend() 时,为了让 TypeScript 正确推断类型,你将不得不做一些额外的处理。接下来,我们来聊一聊它们的细节差异。...这意味着我们可以使用 someProp 的任意属性(存在或者是不存在的)都可以通过编译。为了防止此种情况的发生,我们将会给 Prop 添加类型注释。...当在 TypeScript 中使用它时,我们希望得到有关于 mixins 的类型信息。...而类做为 TypeScript 特殊的存在(它既可以作为类型,也可以作为值),当我们使用 vue-class-component 并通过 $refs 绑定为子类组件时,便能获取子组件暴露的类型信息:...当我尝试在 .vue 文件中导入已存在或者不存在的 .vue 文件时,却得到不同的结果: 文件不存在时: ? 文件存在时: ? 文件不存在时,引用 Vue 的声明文件。

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

如何利用 TypeScript 的判别联合类型提升错误处理与代码安全性

TypeScript中的魔法衣橱整理术 在TypeScript中,判别联合类型(Discriminated Unions)使用一个共同的属性,称为判别属性(discriminant),来区分联合类型中的不同类型...当你使用Clothing类型时,TypeScript类型系统可以使用这个判别属性来缩小类型范围,并根据是Top还是Bottom提供更具体的信息或检查。...: '看这张不同的裤子' }); // TypeScript 类型错误:对象文字可能只能指定已知属性,且 `src` 不存在于 `{ type: "system"; event: string; }`...在第一个用法中,TypeScript不会报错,因为参数完全符合Message类型。...console.error(`冲突错误: ${error.message}`); break; case 'UnauthorizedError': console.error(`未授权错误

10910

初探TypeScript

为什么用TypeScript TypeScript的定位是静态类型语言,而不是类型检查器;JavaScript作为一门解释型语言,在动态数据类型的变量中,很可能出现在编译过程中,因为数据类型问题而把时间耗费在...debug过程中,大大降低了开发效率;TypeScript类型机制,能让开发者通过对类型监控程度的控制,大大减少甚至杜绝由变量类型引起的报错;这种开发手段,在构建大型项目或多人协作项目,都能起到很好的正面作用...: string = Color[1]; console.log(colorName);   // Green //never类型  表示永不存在的值的类型,如抛出异常或无返回值的函数表达式或箭头函数表达式的返回类型...TypeScript接口 TypeScript的核心原则之一是对值所具有的结构进行类型检查。 它有时被称做“鸭式辨型法”或“结构性子类型化”。...但不足在于,学习成本可能需要些时间,引入第三方JS库的时候,一般都不会有.ts文件。

81520

如何处理TypeScript中的可选项和Undefined

undefined通常会出现在几个关键地方: 对象中未初始化或者不存在的属性 函数中被忽略的可选参数 用来表明请求值丢失的返回值 可能未被初始化的变量 TypeScript拥有处理上述所有问题的工具。...当你对一个对象访问并不存在的属性时,JavaScript将会返回undefined,而不是报错。 在TypeScript严格模式下,这意味着下面几种情况。...如果你在IDE中把鼠标悬停在Foo,你会看到TypeScript实际已经把bar定义为number | undefined的联合类型。...TypeScript可以理解这类检查,并可以使用它们来收窄对特定代码类型的检查范围(类型收窄)。 我们可以对bar属性使用 typeof, 用来检查它是否是undefined。...TypeScript也会注意这段代码。在if子句中,会把bar属性的类型收窄为number。

3.6K10

TypeScript】超详细的笔记式教程【中】

”缺少类型“number[]”的以下属性: pop, push, concat, join 及其他 24 项 因为类数组并没有数组原型的方法,pop等等,所以如果用array去定义,那么类型校验不通过...“Dog | Fish”不存在属性“swim” 这个时候我们就可以用类型断言,将animal断言成Fish: interface Dog { name: string; run():...: number = 1 foo.length = 1 这样写是不能通过编译的,因为foo是number类型,是没有length属性的,所以TypeScript给了提示类型“number”不存在属性...“Window & typeof globalThis”不存在属性“foo”。...,这时候我们就可以用类型断言,把window断言成any,any类型,访问任何属性都是允许的,像这样: (window as any).foo = 1 ok 将any断言成任何一种类型 举个栗子:

98520

巧用 TypeScript(三)

数组与元组 创建一个数组很简单: const arr = [1]; 此时 TypeScript 将会推断 arr 类型为 number[]: arr.push('1'); // Error 当数组元素具有其它类型时...// 类型安全 字面量类型 在 JavaScript 基础TypeScript 扩展了一系列字面量类型,用来确保类型的准确性。...type C = A | B; type D = A & B; 对象字面量类型 对于对象字面量的类型TypeScript 有一个被称之为 「Freshness 」的概念,它也被称为更严格的对象字面量检查...// ok someThing = { name: 'hello', age: 123 }; // Error, 对象字面量只能指定已知属性, { name: string } 类型不存在...logName({ name: 'matt', job: 'being awesome' }); // Error: 对象字面量只能指定已知属性,`job` 属性在这里并不存在

17010

npm publish package 开发错误集合

eslint-loader/index.js): Error: No ESLint configuration found in PROJECT\cat-web-storage\dist. 06 - 不存在属性警告错误...$localStorage.set('number', 10086); // 情况三 ^ 此警告错误是因为缺少类型描述文件,即 *.d.ts 文件。...使用 rollup + TypeScript 的最大的问题就是网上的资料较少且较为古老,部分所使用的包已经不再维护了,后来是自己是按照同名包寻找 rollup 的 TypeScript 版本才最终确定哪些包是可以使用的...后来我就想着,我两个项目(发布项目和测试项目)都是用的 TypeScript 为什么会和 ESLint 有关系?...相关文章 【npm publish package】 发布流程 【npm publish package】 测试流程 版权声明: 本文版权属于作者 林小帅,未经授权不得转载及二次修改。

1.2K10

巧用 TypeScript(三)

数组与元组 创建一个数组很简单: const arr = [1]; 复制代码 此时 TypeScript 将会推断 arr 类型为 number[]: arr.push('1'); // Error...// 类型安全 复制代码 字面量类型 在 JavaScript 基础TypeScript 扩展了一系列字面量类型,用来确保类型的准确性。...type C = A | B; type D = A & B; 复制代码 对象字面量类型 对于对象字面量的类型TypeScript 有一个被称之为 「Freshness 」的概念,它也被称为更严格的对象字面量检查...// ok someThine = { name: 'hello', age: 123 }; // Error, 对象字面量只能指定已知属性, { name: string } 类型不存在...logName({ name: 'matt', job: 'being awesome' }); // Error: 对象字面量只能指定已知属性,`job` 属性在这里并不存在

1.1K20

初次在Vue项目使用TypeScript,需要做什么

JavaScript开发中经常遇到的错误就是变量或属性不存在,然而这些都是低级错误,而静态类型检查恰好可以弥补这个缺点。什么是静态类型?...其次,TypeScript 增加了代码的可读性和可维护性,类型定义实际就是一个很好的文档,比如在调用函数时,通过查看参数和返回值的类型定义,就大概知道这个函数如何使用。...身为 JavaScript 的超集,为支持这些库的类型定义,提供了类型定义文件(*.d.ts),开发者编写类型定义文件发布到npm,当使用者需要在 TypeScript 项目中使用该库时,可以另外下载这个包...为vue实例添加属性/方法 当我们在使用this.route或一些原型的方法时,typescript无法进行推断,在编译时会报属性route不存在的错误,需要为这些全局的属性或方法添加全局声明 对shims-vue.d.ts...建议及注意事项 改造过程 在接入 TypeScript 时,不必一次性将所有文件都改为ts语法,原有的语法也是可以正常运行的,最好就是单个修改 初次改造时出现一大串的错误是正常的,基本都是类型错误,按照错误提示去翻译进行修改对应错误

6.5K40

基本类型_TypeScript笔记2

一.JavaScript类型 JavaScript有7种类型:Boolean、Number、String、Undefined、Null、Object,以及ES6新增的Symbol 这7种TypeScript...let和const最终都会被编译成var,块级作用域等特性通过变量重命名来模拟 二.TypeScript类型 TypeScript共有13种基本类型,除了JavaScript所有的7种之外,还有: Array...)或不知道类型的东西(混合类型数组),可以声明any类型绕过类型检查 Void:空类型,表示没有类型,比如无返回值函数的返回值类型 Never:绝不存在的值的类型,如永远不会返回的函数(必定抛异常的,或函数体有死循环的...// 空类型 function neverReturn(): never {throw 'error';} // 绝不存在类型 需要注意几点: Array类型有2种声明格式(elemType []和...如果指定了数值,后一项的值在此基础递增,否则要求之后的项都要指定值(默认的数值递增机制应付不了了) Any类型相当于局部的类型检查开关,这在TypeScript与JavaScript代码并存的项目中很有意义

74220

TypeScript 演化史 — 第九章】object 类型 和 字符串索引签名类型的点属性

TypeScript 2.2 引入了一个新的 object 类型。它表示任何非基本类型。...; // 所有非基本类型 type NonPrimitive = object; 使用 object 类型类型声明 随着 TypeScript 2.2 的发布,标准库的类型声明已经更新,以使用新的...Object 类型 TypeScript 定义了另一个与新 object 类型几乎同名的类型,那就是 Object 类型。...当咱们试图访问此类对象的任意属性时,TypeScript 会提示编译时错误 // Type {} const obj = {}; // Error: 类型“{}”不存在属性“prop” obj.prop...= "value"; 但是,仍然可以使用在 Object 类型定义的所有属性和方法,这些属性和方法通过JS 的原型链调用: // Type {} const obj = {}; // "[object

1.4K30

TypeScript 的魔法技能:satisfies

现在,随着 TS 4.9 的发布,在 TypeScript 中有了一种新的、更好的方式来做类型安全校验。...例如,下面这行代码编译得很好,但会在运行时会抛出错误: routes.NONSENSE.path // TypeScript 报错:发现这个路由属性不存在 为什么会这样?...Record const routes = { AUTH: { path: "/auth", }, } as Routes 这是 TS 中常见的做法,但实际是相当危险的...因为我们不仅会遇到和上面一样的问题,而且你会写出完全不存在的键值对,因为 TypeScript 会以另一种方式看待这样的写法: type Route = { path: string; children...Typescript 4.9 引入了新的 satisfies 关键字,它对于 Typescript 中大多数与类型检查、匹配相关的任务都非常方便。

41610
领券