You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
letobj1: {}={a: 1};letobj2: object={a: 1};obj1.a;// Error: Property 'a' does not exist on type '{}'obj2.a;// Error: Property 'a' does not exist on type 'object'
classA{publicfoo: string;// foo: string;privatebar: string;protectedbaz: string;constructor(msg: string){this.foo=msg;this.bar=msg;this.baz=msg;}getFoo(){returnthis.foo;}}classBextendsA{constructor(msg: string){super(msg);this.foo;// Okthis.bar;// Error: Property 'bar' is private and only accessible within class 'A'.this.baz;// Ok}getFoo(){returnsuper.getFoo()+'b';}}constb=newB('str');b.foo;// Okb.bar;// Error: Property 'bar' is private and only accessible within class 'A'.b.baz;// Error: Property 'baz' is protected and only accessible within class 'A' and its subclasses
欢迎来到 《探索 TypeScript 类型注解》 系列教程。
开篇我们(重新)认识了 TypeScript,本篇探索 TypeScript 的原生数据类型。
目录
1 初识类型注解
Type Annotation 类型注解
: Type
。如: boolean
。bar
为布尔值。Type 'string' is not assignable to type 'boolean'
。bar
上时,会提示let bar: boolean
。2 基础类型
Primitive Type
boolean
、number
、string
、symbol
、undefined
null
void
、never
any
、unknow
JS 基础类型
TypeScript 支持 JavaScript 的基础类型
TypeScript 还支持字面量类型,变量只能初始化为相应的字面量类型值。
新增基础类型
void
void
标识函数没有返回值(即返回 undefined)。never
never
标识函数不会 return。如抛出异常或生成器函数存在while(true){}
。基础类型兼容
undefined && null 兼容性
undefined
、null
为子类型,可赋给其它类型。在 tsconfig.json 中:strictNullChecks
为 false 时,undefined、null 可赋值给除never
外的任意类型的变量。strictNullChecks
为 true 时,undefined 只能赋值给void
、any
类型的变量。void 兼容性
void
作为返回值类型时,可用其它类型替换。never 兼容性
never
是所有类型的子类型, 可赋给任意类型。在 tsconfig.json 中:strictNullChecks
为 false 时,可直接赋给任意类型。strictNullChecks
为 true 时,never
需在赋值后才能使用。any 兼容性
TS 还增加了
any
类型,当不希望 TS 检查时使用。any
类型。any
类型可以赋值给其它类型 (never
除外) 。unknow 兼容性
TS 增加的
unknow
相对于any
类型更安全。unknown
类型。unknown
类型不可以赋值给其它类型基本包装对象兼容性
3 引用类型
Reference Type
Date
、RegExp
、Error
、Function、Class 等类型tuple
、enum
类型Object
{ prop: T }
描述对象类型的结构 (详解见下篇)Array
三种定义方式(后两种详解见下篇):
[]
,即T[]
Array<T>
ReadonlyArray<T>
interface
定义类型Tuple
元组:已知固定元素及类型的数组
Enum
枚举: 定义一组命名常量(枚举成员只读)
Date RegExp Error
Function
描述参数和返回值类型
(paramter: T): U
描述函数定义: (paramter: T) => U
描述函数变量参数
foo: T
foo?: T
foo: T = value
...rest: T[]
重载
Class
TypeScript 保留了 ES6 的语法,以下是分别用 ES6 和 TS 语法实现的类的创建和继承:
TS 在 ES6 基础上对 class 增添了功能。
三种访问修饰符:
public
在 TS 中,成员默认为公有成员。private
私有成员只能在类中访问,不能在类的外部访问。protected
受保护的成员只能在类和子类中访问。抽象类: 使用
abstract
定义抽象类和抽象类中的抽象方法结语
本篇介绍了 TS 的原生数据类型,下一篇介绍如何自定义类型。
协议
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。
《探索 TypeScript 类型注解》
参考链接
Handbook: https://github.com/microsoft/TypeScript-Handbook
The text was updated successfully, but these errors were encountered: