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

【TS 演化史 -- 13】字符串枚举 和 弱类型(Weak Type)探测

字符串值枚举成员没有反向映射 TypeScript 为每个构造映射对象枚举发出一些映射代码。...从 TypeScript 2.4 开始,当属性没有重叠时,给弱类型赋值一个错误,带有以下消息的类型检查器错误 类型“{ semicolons: boolean; }”与类型“PrettierConfig...另一个好处 TypeScript 语言可以给咱们自动完成建议,因为类型注释告诉它咱创建的对象类型。 弱类型的解决方法 如果出于某种原因,咱们就是不想从特定弱类型的弱类型检测中获得错误,该怎么办?...也许在一个用例中,这种方法有意义的,但是通常,咱们应该更喜欢其他解决方案之一。 弱类型检测的限制 请注意,弱类型检测仅在属性中完全没有重叠时才会产生类型错误。...因为printWidth存在于PrettierConfig中,现在咱们的对象和PrettierConfig类型之间有一个属性重叠,弱类型检测不再为函数调用引发类型错误。

1.6K10

细数这些年被困扰过的 TS 问题

好的,下面我们来开始介绍第一个问题 —— 如何在 window 对象上显式设置属性。...四、如何理解装饰器的作用 在 TypeScript 中装饰器分为类装饰器、属性装饰器、方法装饰器和参数装饰器四大类。装饰器的本质一个函数,通过装饰器我们可以方便地定义与对象相关的元数据。...很明显 Combinable 和 number 类型对象上并不存在 split 属性。问题又来了,那如何解决呢?这时我们就可以利用 TypeScript 提供的函数重载。...7.3 {} 类型 {} 类型描述了一个没有成员的对象。当你试图访问这样一个对象的任意属性时,TypeScript 会产生一个编译时错误。...当然你可以使用类型断言把 person 转为 any 类型: console.log((person as any).name); 通过这种方式虽然解决了 TypeScript 编译器的异常提示,但是在运行时我们还是可以访问到

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

遇到这些 TS 问题你会头晕么?

为什么枚举会支持这种特性呢?这是因为枚举类型 Number 类型的子类型,所以可以使用数值运算符来计算枚举的值。...子类型和赋值兼容性要求源类型相对于其目标类型没有多余的属性。此检查的目的检测对象字面量中是否包含多余或拼写错误的属性。 如果满足以下条件,则认为源类型 S 相对于目标类型 T 含有多余的属性。...S 类型一种 fresh 对象字面量类型(fresh object literal type)且; S 类型包含 T 类型中不被期望(expected)的一个或多个属性。...(3) 是因为对象字面量类型被扩展(widened),而 (4) 是因为类型断言使得对象字面量的新鲜度消失,这就破坏了 “源类型 S 相对于目标类型 T 含有多余的属性” 中的第一个条件,即 S 类型一种...: number;} = { colour: 'blue', width: 666, }; // same property 以上的内容相对比较难理解,这里我们只要记住多余的属性检查的目的,检测对象字面量中是否包含多余或拼写错误的属性

5.2K20

TypeScript超详细入门教程(上)

但我还是想给你讲讲如何自学TypeScript,在授你以鱼之前也会授你以渔的,这样TypeScript即使更新了,你也能毫无压力地迎接它的新特性。好,接下来让我们开始吧。...不过我们还是要感谢提供中文文档的译者,这对于英文不是很好的开发者帮助还是很大的。 1.2.2 学会看报错 我们在前面的例子中展示了 TypeScript 在编写代码的时候如何对错误进行提示。...上面这个报错可以从红色方框中看到,标识了 ts,说明它是 TypeScript 编译器报的错误。在我们书写代码的时候,通过强类型系统,编译器可以在这个阶段就检测到我们的一些错误。.... // 这是因为编译器检测到这里的s1 === s2始终是false,所以编译器提醒你这代码写的多余,建议你优化。...会把我们定义的枚举值的字段名分别作为对象属性名和值,把枚举值的字段值分别作为对象的值和属性名,同时添加到对象中。

4.1K41

Web前端面试敲重点知识,14个TypeScript核心基础面试题和答案

4、什么 any 类型,何时使用 ? 5、什么void,什么时候使用void类型 ? 6、TypeScript 中声明变量有哪些不同的关键字? 7、如何书写带有类型注释的函数 ?...8、如何TypeScript 中创建对象 ? 9、如何TypeScript 中指定可选属性 ? 10、说说枚举TypeScript如何工作的 ? 11、什么参数解构 ?...有时你想将值存储在变量中,但事先不知道该变量的类型 当你没有明确提供类型时,TypeScript假定变量any类型,并且编译器无法从周围的上下文中推断出类型 例如,该值来自 API 调用或用户输入。...它们类似于数组,有时也称为关联数组 但是,数组使用数字来索引值,而对象允许使用任何其他类型作为键 image.png 9、如何TypeScript 中指定可选属性 ? 通过添加 ?...对象类型可以具有零个或多个可选属性,在属性名称之后 image.png 10、说说枚举TypeScript如何工作的 ?

11.4K10

TypeScript 演化史 — 第四章】更多的字面量类型 与 内置类型声明

这样做的好处编译器仅在检查了 parsed.success 后才允许咱们使用value或error属性: 如果 parsed.success 为 true,则 parsed 的类型必须为 { success...由于 httpPort 的类型为 80,因此它始终包含值 80,该值当然永远不会等于值 443。在这种情况下,TypeScript 编译器可以帮助咱们检测错误的逻辑和无效的代码。...现在,内置的标准库声明已经模块化,TypeScript 允许我们选择包含哪种类型声明。 --lib 编译器选项 JS 标准库的类型声明被划分为一组 API 组。...TypeScript 编译器。...TypeScript 将只注入你指定的类型;也就是说,它会将所有其他 API 组视为不存在于你的的环境中。

1.2K30

TypeScript入门指南:JavaScript开发者的简明概述与实用示例

中使用类,提供了创建具有属性和方法的对象的方式。...示例:let x = 10; // TypeScript推断类型为number联合类型枚举:TypeScript允许你为可以具有多种类型的变量定义联合类型枚举帮助你创建具有命名常量值的常量。...TypeScript中的接口是什么,为什么要使用它们? 回答: 接口定义对象的结构。它们指定对象应该具有的属性的名称和类型。使用接口可以清楚地说明对象应该具有的形状,促进一致性,避免潜在的错误。...TypeScript如何支持基于类的面向对象编程? 回答: TypeScript支持类,它们创建对象的蓝图。...类可以具有属性和方法,提供了一种组织和结构化代码的方式,更容易以面向对象的方式创建和管理对象。解释TypeScript类型别名的概念。 回答: 类型别名允许你为现有类型创建一个新的名称。

15200

了不起的 TypeScript 入门教程

在 JavaScript 中没有元组的,元组 TypeScript 中特有的类型,其工作方式类似于数组。 元组可用于定义具有有限数量的未命名属性类型。每个属性都有一个关联的类型。...换句话说,类型保护可以保证一个字符串一个字符串,尽管它的值也可以是一个数值。类型保护与特性检测并不是完全不同,其主要思想尝试检测属性、方法或原型,以确定如何处理值。...原因在 Motorcycle 接口中,并不存在 capacity 属性,而对于 Car 接口来说,它也不存在 capacity 属性。那么,现在我们应该如何解决以上问题呢?...接口 在面向对象语言中,接口一个很重要的概念,它是对行为的抽象,而具体如何行动需要由类去实现。...十一、TypeScript 类 11.1 类的属性与方法 在面向对象语言中,类一种面向对象计算机编程语言的构造,创建对象的蓝图,描述了所创建的对象共同的属性和方法。

6.9K52

TypeScript 常用知识总结

二、新添功能 类型批注和编译时类型检查 类型推断 类型擦除 接口 枚举 Mixin 泛型编程 名字空间 元组 Await 以下功能从 ECMA 2015 反向移植而来: 类 模块 lambda 函数的箭头语法...例如,TypeScript 使用类型和接口等概念来描述正在使用的数据,这使开发人员能够快速检测错误并调试应用程序 TypeScript 从核心语言方面和类概念的模塑方面对 JavaScript 对象模型进行扩展...TypeScript 引入了命名空间 TypeScript 的优势 静态输入: 静态类型一种功能,可以在开发人员编写脚本时检测错误。查找并修复错误当今开发团队的迫切需求。...TypeScript 一次只能继承一个类,不支持继承多个类,但 TypeScript 支持多重继承(A 继承 B,B 继承 C) Typescript 中的对象必须特定类型的实例 var sites...类描述了所创建的对象共同的属性和方法。 TypeScript 支持面向对象的所有特性,比如 类、接口等。

1.8K30

1.8W字|了不起的 TypeScript 入门教程(第二版)

3.{} 类型 {} 类型描述了一个没有成员的对象。当你试图访问这样一个对象的任意属性时,TypeScript 会产生一个编译时错误。...: number; 确定赋值断言,TypeScript 编译器就会知道该属性会被明确地赋值。 四、类型守卫 类型保护可执行运行时检查的一种表达式,用于确保该类型在一定的范围内。...换句话说,类型保护可以保证一个字符串一个字符串,尽管它的值也可以是一个数值。类型保护与特性检测并不是完全不同,其主要思想尝试检测属性、方法或原型,以确定如何处理值。...接口 在面向对象语言中,接口一个很重要的概念,它是对行为的抽象,而具体如何行动需要由类去实现。...类 11.1 类的属性与方法 在面向对象语言中,类一种面向对象计算机编程语言的构造,创建对象的蓝图,描述了所创建的对象共同的属性和方法。

10.1K51

TypeScript 快速入门

//对象属性名会自动转换为字符串 const obj = {}; obj[true] = 100; console.log(obj['true']);//对对象索引器的错误用法 强类型的优势: 错误更早暴露...const foo:[string,number] = ['foo',123];//第一个元素必须字符串 第二个元素数字 对象类型 /* 对象类型 @flow */ //定义对象的成员类型方式如下...(1); } passAny(200); passAny('100'); 运行环境API 类型 /* 运行环境API 类型 https://github.com/facebook/flow/blob/...Draft:0, Unpublished:1, Published:2 } 枚举类型的写法 //默认值:0开始 依次累加 可以不用指定值 //枚举值可以是字符串 但是字符串无法像数字一样自增长...需要给每一个枚举赋值 //常量枚举 以及 基本枚举的编译情况不同的 注意 const enum PostStatus{ Draft,//0 Unpublished,//1 Published

1.5K10

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

但是,类型断言纯粹一个编译时语法,同时,它也是一种为编译器提供关于如何分析代码的方法 类型断言通常被认为有害的 在很多情景下,断言能让你更容易的从遗留项目中迁移(甚至将其他代码粘贴复制到你的项目中)...让我们用最初的代码做为示例,如果你没有按约定添加属性TypeScript 编译器并不会对此发出错误警告: interface Foo { bar: number; bas: string; }...上面的foo,并没有bar和bas属性,但是通过了检验。这是相当危险的,那熟悉的xx from undefined 报错 双重断言 类型断言,尽管我们已经证明了它并不是那么安全,但它也还是有用武之地。...Freshness 为了能让检查对象字面量类型更容易,TypeScript 提供 「Freshness」 的概念(它也被称为更严格的对象字面量检查)用来确保对象字面量在结构上类型兼容。...WARNING 请注意,这种错误提示,只会发生在对象字面量上 允许分配而外的属性: 一个类型能够包含索引签名,以明确表明可以使用额外的属性: let x: { foo: number, [x: string

1.9K30

Typescript真香秘笈

设置为any类型后,相当于告诉typescript编译器跳过这个变量的检查,因此可以访问、设置这个变量的任何属性,或者给这个变量赋任何值,编译器都不会报错。...never表示的函数永远不会正常返回,所以不可能有值。 enum 枚举类型 使用枚举类型可以为一组数值赋予友好的名字。...: number; } const square: SquareConfig = { color: 'red', }; 只读属性: 一些对象属性只能在对象刚刚创建的时候修改其值。...可索引类型: 可索引类型,实际就是声明对象的索引的类型,与对应值的类型。接口支持两种索引类型,一种number,一种string,通过可索引类型可以声明一个数组类型。...声明文件一般在用第三方库的时候才会用到,因为第三方库都是js文件,加上声明文件之后,ts的编译器才能知道第三库暴露的方法、属性类型

5.6K20

早读《Const Assertions in Literal Expressions in TypeScript

这个类型对象属性字符串类型对不上的,比如你直接传递 "HTTPMethod.GET",不过常规方法还是要使用枚举来处理这些问题,由于提取精髓,因此略有删减。...TypeScript 对于类型推断有它自己的一套原则,当你定义了一个封装,如下一个场景就能还原这个问题: function fetchJSON(url: string, method: "GET" |...如果你使用: fetchJSON("https://example.com/", HTTPRequestMethod.GET) .then(data => { // ... }); TS编译器检查类型时会报错...,原因在于属性的字符串和字符串类型,这是有区别的,要理解这个问题需要去理解 TS 如何定义字符串的,这里作者写的很长,综合起来就是: 如果定义常量,不可变,TS知道其中的值 使用的 let 或者 对象属性都是字符串类型...: 文字表达式中的文字类型都不会扩展 对象属性只读 数组变成只读的元组 由于变成了只读,如果你还想给 HTTPRequestMethod 分配新的值时,TS编译器会给出错误的。

50120

【译】2019年开始使用Typescript

TypeScript在js开发者中这么受喜爱的原因:在你运行代码前,添加到javascript中的类型有助你发现错误(代码)。TypeScript编译器提供的错误可以很好的引导你如何修复代码错误。...如果你仅仅是想TypeScript生效的话,你只需要tsconfig.json文件中包含一个空JSON对象,但是,如果你需要TypeScript编译器的有不同的行为(比如在特定的输出目录中输出编译后的JavaScript...类型推断 幸运的,你不需要在代码中全部位置指定类型,因为TypeScript具有类型推断。类型推断TypeScript编译器用来自行决定类型的(内容)。...string的默认值,因此TypeScript编译器会推断出message的类型string,因此在访问length属性的时候并不会抛出编译错误。...可能存在函数参数或者对象属性可选的情况。

2.2K20

2019年开始使用Typescript

TypeScript在js开发者中这么受喜爱的原因:在你运行代码前,添加到javascript中的类型有助你发现错误(代码)。TypeScript编译器提供的错误可以很好的引导你如何修复代码错误。...如果你仅仅是想TypeScript生效的话,你只需要tsconfig.json文件中包含一个空JSON对象,但是,如果你需要TypeScript编译器的有不同的行为(比如在特定的输出目录中输出编译后的JavaScript...类型推断 幸运的,你不需要在代码中全部位置指定类型,因为TypeScript具有类型推断。类型推断TypeScript编译器用来自行决定类型的(内容)。...string的默认值,因此TypeScript编译器会推断出message的类型string,因此在访问length属性的时候并不会抛出编译错误。...可能存在函数参数或者对象属性可选的情况。

86620

掌握 TypeScript:20 个提高代码质量的最佳实践

这些最佳实践涵盖了各种主题,并提供了如何在真实项目中应用它们的具体示例。无论你初学者还是经验丰富的 TypeScript 开发者,本文都将提供有价值的见解和技巧,帮助你编写干净高效的代码。...类型推断 TypeScript 编译器根据变量赋值的值自动推断变量类型的能力。这意味着你不必在每次声明变量时都显式指定类型。相反,编译器会根据值推断类型。...它指定了该类型对象应具有的属性和方法,并且可以用作变量的类型。这意味着,当你将一个对象分配给带有接口类型的变量时,TypeScript 会检查对象是否具有接口中指定的所有属性和方法。...它可以用于明确指示哪些属性对象允许的。...文章中还介绍了一些如何使用 TypeScript 的高级特性的最佳实践,例如使用类型别名和枚举,以提高代码的可读性和可维护性。此外,该文章还强调了如何使用可选链操作符来避免一些运行时错误。

4K30

深入理解 TypeScript 中的 Keyof 运算符,让你的代码更安全、更灵活!

一、如何定义 KeyOf 运算符 在 TypeScript 中,keyof 运算符用于获取用户定义的值。它主要用于泛型,格式类似于联合运算符及其属性。keyof 运算符会检索用户指定的值的索引。...Status 枚举的每个值映射到一个对象,该对象具有 label 属性(字符串类型)和 color 属性(特定字符串字面量类型)。...statusMap 对象符合 Record 类型定义,确保每个 Status 枚举值都映射到一个具有 label 和 color 属性对象。...Pick 类型 Pick 另一个实用类型,它允许我们从一个对象类型中选择一个或多个属性,并生成一个包含这些属性的新类型。...在本文中,我们探讨了如何TypeScript 泛型、映射类型、显式键、索引签名、条件映射类型和实用类型中使用 keyof 运算符。

8810
领券