首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

TypeScript 初学者入门学习笔记(一)

也就是说 undefined 类型的变量,可以赋值所有类型的变量,包括 void 类型: let num: number = undefined; let u: undefined; let str...: string = u; let vo: void= u; // 编译通过 而 void 类型的变量不能赋值其他类型的变量,只能赋值 void 类型: let u: void; let num:...let data: string | number; // 允许 data 可以是 string 或 number 类型,但不能是其他类型 data = 'seven'; data = 7; data...例二:只读的约束存在于第一次对象赋值的时候,而不是第一次只读属性赋值时: interface Person { readonly id: number; name: string;...but required in type 'Person' 对 p2 赋值时,没有 id 赋值 // Cannot assign to 'id' because it is a read-only

1.8K20

TypeScript】never 和 unknown 的优雅之道

// 正确 let b: undefined = n; // 正确 // never 是 bottom type,除了自己以外没有任何类型可以赋值给它 let ne: never; ne = null...; ne = nev; // 正确,只有 never 可以赋值 never 上面的例子基本上说明了 null/undefined 跟 never 的区别,never 才是最 bottom 的。...从上文我们知道,除了 never 自身,没有任何类型赋值 never。any 是否满足这个特性呢?...显然不能,举个很简单的例子: const a = 'anything'; const b: any = a; // 能够赋值 const c: never = a; // 报错,不能赋值 而我们为什么说...返回类型为底部类型的函数不能返回任何值,甚至不能返回零大小的单元类型。因此返回类型为底部类型的函数不能返回。

1.2K20

基本类型_TypeScript笔记2

一.JavaScript类型 JavaScript有7种类型:Boolean、Number、StringUndefined、Null、Object,以及ES6新增的Symbol 这7种TypeScript...Void类型的变量也是合法的,约束值只能是undefined或null Null、Undefined和Never是其它类型的子类型,因此可以赋值任何其它类型变量(例如let str: string...= null也是合法的) Never类型不可以赋值其它任何类型,即便是Any也不行 Never类型的变量也是合法的,此时Never可以用作类型保护(例如declare const name: never...;避免隐式访问window.name) P.S.特殊的,建议开启--strictNullChecks选项,此时Undefined和Null只允许赋值Void以及各自对应的类型 P.S.关于Never作为类型保护的应用...,见Improve type safety of name global variable 三.类型断言 可以通过类型断言告知TypeScript编译器某个值的确切类型Type assertions

74620

TypeScript 演化史 — 第二章】基于控制流的类型分析 和 只读属性

下面的示例演示了 TypeScript 如何理解赋值局部变量的影响,以及如何相应地缩小该变量的类型: let command: string | string[]; command = "pwd"...因此,没有从 command 变量的联合类型中删除字符串类型,并产生以下编译时错误: Property 'join' does not exist on type 'string | string[]...通常,在使用可空类型的变量之前,我们需要检查该变量是否具有非空值: type Person = { firstName: string; lastName?...在严格的 null 检查模式下,undefined类型会自动添加到可选属性的联合类型中,因此我们不必显式将其写出。 明确赋值分析 基于控制流的另一个新特性是明确赋值分析。...在严格的 null 检查模式下,对类型不允许为 undefined 的局部变量有明确赋值的分析: let name: string; // Error: 在赋值前使用了变量 “name” console.log

2K10

TypeScript 基础教程

null、undefined: null,undefined :同js值类型,默认是所有类型的⼦类型所以,可以任意类型的变量赋值null、undefined any: 定义:任意值类型,可以赋值任意值类型...当前并无支持 type 类型别名 *** 定义:⼀个类型起⼀个新的名字,使⽤ type 作为声明关键字。...常用于复合类型数据变量的类型声明。 对象类型约定使用大写字母开头 。type 声明的类型,里面包含的属性必须刚好全部满足,不能多也不能少,否则编译将报错,可选属性除外。...每个类型可以是单一类型或复合类型 type RTX = number|string|null; let foo: RTX = "bar"; foo = 123; foo = null; foo = undefined...) as HTMLElement; } 类型推论: 定义:TypeScript 会通过变量或返回值等赋值时推导出这个值的类型,如果在随后的代码中又进行了不同类型的值赋值,那么编译会报错: let foo

1K20

TS 进阶 - 类型基础

null 有值,但是个空值 undefined 没有值 在 TypeScript 中,null 和 undefined 类型是有具体意义的类型。...{} // foo, bar 都会被推导为 any 类型 any 类型的变量几乎无所不能,它可以在声明后再次接受任意类型的值,同时可以被赋值任意其他类型的变量: let anyVal: any =...如果是要表达一个未知类型,考虑使用 unknown 类型 # unknown unknown 类型的变量可以再次赋值为任意其他类型,但注意只能赋值 any 或 unknown 类型的变量: let...= unknownVal; // Error unknown 和 any 的主要差异体现在赋值别的变量时,any 把所有类型都兼容,而 unknown 在期待一个确定的值。...和 null、undefined 一样,是所有类型的子类型,但只有 never 类型的变量可以赋值另一个 never 类型的变量。 通常不会显式声明一个 never 类型,它主要被类型检查所使用。

1.7K50

理解 TypeScript 类型拓宽

(vec, x); // OK 因为 x 不能重新赋值,所以 TypeScript 可以推断更窄的类型,就不会在后续赋值中出现错误。...因为字符串字面量型 “x” 可以赋值 “x”|”y”|”z”,所以代码会通过类型检查器的检查。 然而,const 并不是万灵药。对于对象和数组,仍然会存在问题。...对于对象,TypeScript 的拓宽算法会将其内部属性视为将其赋值 let 关键字声明的变量,进而来推断其属性的类型。因此 obj 的类型为 {x:number} 。...这使得你可以将 obj.x 赋值其他 number 类型的变量,而不是 string 类型的变量,并且它还会阻止你添加其他属性。...[0]; // Type string const second = protocols[1]; // Type string TypeScript 推断出 protocols 的类型string[

1.6K40

TypeScript一些知识点

TypeScript的原始类型 TypeScript常见原始类型有: boolean string number bigint symbol undefined null void 枚举类型 字面量类型...由于它是所有类型的子类型,所以它可以赋值任何类型,但是其他类型不能赋值给它,包括 any。...let a: never; // OK let b: boolean = a; // OK 它可以赋值任何类型 let c: any = 1; a = c; // Error 其他类型不能赋值给它 a...= 1; // Error never没有值 let d: never = undefined; // Error never没有值 显示设置undefined也不行 注:虽然 never 可以赋值任何类型...由于元组类型是数组的子类型所以元组类型可以赋值数组类型,前提是元组中的每一项都符合数组的每一项类型;数组类型不能赋值元组类型的。

8710

理解 TypeScript 类型收窄

如果 TypeScript 不能识别出类型,你甚至可以引入一个自定义函数来帮助它: function isInputElement(el: HTMLElement): el is HTMLInputElement...== undefined); // Type is (string | undefined)[] 可惜的是 TypeScript 也无法理解你的意图,但是如果你使用一个类型保护函数的话就可以: function...is string[] 二、全面性检查 在 TypeScript 中我们可以利用类型收窄和 never 类型的特性来全面性检查,比如: type Foo = string | number; function...const check: never = foo; } } 注意在 else 分支里面,我们把收窄为 never 的 foo 赋值一个显示声明的 never 变量。...方法中的控制流程,这时候 else 分支的 foo 类型会被收窄为 boolean 类型,导致无法赋值 never 类型,这时就会产生一个编译错误。

4.6K20

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

): let unusable: void = undefined; 2.5、Null 和 UndefinedTypeScript 中,可以使用 null 和 undefined 来定义这两个原始数据类型...注意,只读的约束存在于第一次对象赋值的时候,而不是第一次只读属性赋值的时候: interface Person { readonly id: number; name: string...上例中,报错信息有两处,第一处是在对 tom 进行赋值的时候,没有 id 赋值。 第二处是在给 tom.id 赋值的时候,由于它是只读属性,所以报错了。... Animal 类型的 animal 了——就像面向对象编程中我们可以将子类的实例赋值类型为父类的变量。...则会报错,不允许将 animal 赋值为 Cat 类型的 tom。 这很容易理解,Animal 可以看作是 Cat 的父类,当然不能将父类的实例赋值类型为子类的变量。

5K20
领券