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

TypeScript学习笔记(二)—— TypeScript基础

: number; } let tom: Person = { name: 'Tom', age: 25 }; 可选属性的含义是该属性可以不存在。...当我们引用一个在此类型不存在属性或方法时,就会报错: const foo: number = 1; foo.length = 1; // index.ts:2:5 - error TS2339:...上面的例子中,我们需要将 window 添加一个属性 foo,但 TypeScript 编译时会报错,提示我们 window 不存在 foo 属性。...此时我们可以使用 as any 临时将 window 断言为 any 类型: (window as any).foo = 1;  any 类型的变量,访问任何属性都是允许的。...,那么被断言为父类,获取父类的属性、调用父类的方法,就不会有任何问题,故「子类可以被断言为父类」 需要注意的是,这里我们使用了简化的父类子类的关系来表达类型的兼容性,而实际 TypeScript 判断类型的兼容性时

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

TS 中的类型验算,高级通用 API 实现

TS 内置类型Partial:将 T 所有属性变为可选属性Required:将 T 所有属性变为必选属性Readonly:将 T 所有属性变为只读属性NonNullable:过滤...T 类型中的 null 及 undefined 类型Parameters:获取函数的参数类型,将每个参数类型放在一个元组中Omit:类型 T 中剔除 K 中的所有属性Pick:类型 T 中挑选 K 中的所有属性Exclude:提取存在于 T,但不存在于 U 的类型组成的联合类型Extract:提取联合类型 T 和联合类型 U 的所有交集Record...typeof:类型上下文中获取变量或者属性类型in:常用来遍历枚举类型TS compiler 内部实现的类型Uppercase:构造一个将字符串大写的类型Lowercase:构造一个将字符串转小写的类型...Capitalize:构造一个将字符串首字符大写的类型Uncapitalize:构造一个将字符串首字符大小写的类型实现 Optional API,实现部分类型变为可选type Article = {

13910

一文看懂any,never,void和unknown的区别

any 首先给大家介绍的是any类型,我相信一些JavaScriptTypeScript的同学一定不会对这个类型感到陌生,因为它是我们将JavaScript代码重构为TypeScript代码的银弹,...除了这个,你还可以随意访问这个any对象上面的任意属性,即使它们不存在: let something: any = 'Hello World!'...} let vNumberForUnknown: number = vUnknown as number // unknown类型一定要使用as关键字转换为number才可以赋值给number类型...我们知道TypeScript解析我们的代码时会对代码进行类型推断,并且代码流不断深入的时候,类型较为宽泛的类型(例如any)一直推断到较为具体的类型,而这么推断下去是会有个终点,这个终点就是不存在的...因为PM类型不可以赋值给never类型 } } 上面代码报错的原因是TechDude这个类型else这个代码体里面已经被TypeScript收拢为PM类型,所以不再是never类型了。

75030

react底层原理

根据新的数据生成一个新的虚拟DOM树 将新旧虚拟 DOM 树进行对比,通过diff算法找到新旧虚拟DOM的差异点,最后将差异点更新到页面上 ---- diff算法: 1、比较层级(tree diff),如果某节点不存在了...2、比较组件(component diff) React对于组件的策略有两种方式,分别是类型相同和类型不同的组件 相同的直接继续比较组件内部的dom,不同的类型的会直接替换掉组件内部所有节点(可能虚拟DOM...react合成事件不会直接绑在dom,而是使用事件委托机制,将事件全部绑定在顶层root节点。当组件挂载或卸载时,只需root节点增加或删除对应事件的监听。...合成事件的好处: • 对事件进行归类,可以事件产生的任务包含不同的优先级 • 提供合成事件对象,抹平浏览器的兼容性差异 • 减少内存消耗,提升性能,不需要注册那么多的事件了,一种事件类型 Root...注册一次 原生事件先于React事件执行 JSX js里面写html是一件很舒服且效率很高的事情,而react通过jsx实现了。

1.1K10

深度讲解TS:这样学TS,迟早进大厂【11】:类型断言

当我们引用一个在此类型不存在属性或方法时,就会报错: const foo: number = 1; foo.length = 1; // index.ts:2:5 - error TS2339:...上面的例子中,数字类型的变量 foo 是没有 length 属性的,故 TypeScript 给出了相应的错误提示。 这种错误提示显然是非常有用的。...上面的例子中,我们需要将 window 添加一个属性 foo,但 TypeScript 编译时会报错,提示我们 window 不存在 foo 属性。...此时我们可以使用 as any 临时将 window 断言为 any 类型: (window as any).foo = 1; any 类型的变量,访问任何属性都是允许的。...,那么被断言为父类,获取父类的属性、调用父类的方法,就不会有任何问题,故「子类可以被断言为父类」 需要注意的是,这里我们使用了简化的父类子类的关系来表达类型的兼容性,而实际 TypeScript 判断类型的兼容性时

1.1K20

TypeScript

any 但有的时候,我们非常确定这段代码不会出错,比如下面这个例子: window.foo = 'foo'; // index.ts:1:8 - error TS2339: Property 'foo...当我们向 window 添加一个 foo 时,会报错示我们 window 不存在 foo 属性。...当然,现在的编译器足够聪明,调用的时候可以不传递类型,编译器可以自己识别的 传递类型时,这个类型函数中使用时的方法/属性,必须是存在的,或者继承自某个接口。...接下来我们以实例化 myNumberClass 为例,来分析一下其调用过程: 实例化 IdentityClass 对象时,我们传入 Number 类型和构造函数参数值 68; 之后 IdentityClass...这里我有意使用不同的变量名,以表明类型值沿链向上传播,且与变量名无关。 #泛型约束 确保属性存在 当我们函数中获取length属性类型为number时,是没有length的,所以会报错。

1.8K10

React学习(二)-深入浅出JSX

,一切皆js,对于JS里面写HTML代码,刚开始是非常反感的,甚至有违背当初的原则 但是,对于原先那种仅仅是把三种语言技术放在了三种不同文件位置里进行分开管理了,实际,它并没有实现逻辑的分离 既然前端...它们描述了你希望屏幕看到的内容。...,子元素,事件对象 JS里面,一切皆对象,对象的特点就是,含有属性或者方法,,其实任何东西,都可以用对象去描述 例如:如下的JSX结构 <input...DOM 树,然后插入到页面上某个特定的元素 所以在你编写一个组件的时候,一开始就要引入react.js和react-dom这两个文件的 当使用JSX到最终展现页面结构到浏览器:经历了如下过程:如果你代码中进行断言一下...是为了渲染组件,将组件挂载到特定的位置,同时将虚拟DOM转换为真实DOM,插入到页面中 总结 本文主要讲述了JSX是什么?

2K30

精读《ObjectEntries, Shift, Reverse...》

['age', number] | ['locations', string[] | null]; 经过前面的铺垫,大家应该熟悉了 TS 思维思考问题,这道题看到后第一个念头应该是:如何先把对象转换为联合类型...对象或数组联合类型的思路都是类似的,一个数组联合类型用 [number] 作为下标: ['1', '2', '3']['number'] // '1' | '2' | '3' 对象的方式则是 [keyof...首先因为返回值是个递归对象,递归过程中必定不断修改它,因此给泛型添加第三个参数 R 存储这个对象,并且递归数组时最后一个开始,这样最内层对象开始一点点把它 “包起来”: type TupleToNestedObject...不如创建一个 SafeUnion 函数,当传入值不存在时返回空字符串,保证安全的跳过: type IsNever = TValue[] extends never[] ?...联合类型,如何对象或数组生成联合类型,字符串模板与联合类型的关系。

50820

【TS 演化史 -- 17】各文件的JSX工厂 、有条件类型和映射类型修饰符

never类型是 TypeScript 的底层类型,表示从未出现的值的类型。 分布式有条件类型 那么,为什么e 条件类型never类型的组合是有用的呢?它有效地允许咱们联合类型中删除组成类型。...| string[] | never | never; 因为never是每个类型的子类型,所以可以联合类型中省略它: type NonNullableEmailAddress = string...}["name"] | { name: "name"; email: never }["email"]; 现在,咱们可以两个对象类型中查找name和email属性。...:User类型中,只有name属性不可空。...预定义的有条件类型 TypeScript 2.8 lib.d.ts里增加了一些预定义的有条件类型: Exclude -- T中剔除可以赋值给U的类型

2.5K20

TypeScript学习笔记

也许在某处你想传入一个 string或null或undefined,你可以使用联合类型string | null | undefined 10、Never never类型表示的是那些永不存在的值的类型。...never类型是任何类型的子类型,也可以赋值给任何类型;然而,没有类型never的子类型或可以赋值给never类型(除了never本身之外)。 即使 any也不可以赋值给never。...你可以属性名前用 readonly来指定只读属性: interface Point { readonly x: number; readonly y: number; } 14、函数类型...在下面的示例代码里,在编译器中将鼠标悬停在 interfaced,显示它返回的是 Interface,但悬停在 aliased时,显示的却是对象字面量类型。...实际应用中,字符串字面量类型可以与联合类型类型保护和类型别名很好的配合。 通过结合使用这些特性,你可以实现类似枚举类型的字符串。

60930
领券