接口 Interface
在 JavaScript 中并没有接口这个概念;
TypeScript 的 核心原则之一是 对值所具有的结构进行类型检查;因此在TypeScript 就出现了接口, 接口就是 为这些 类型命名 和为你的代码或第三方代码 定义 检查的标注和规则。
接口可选属性 和 只读属性
额外的属性
索引签名基础知识(二)讲到继承接口
和类一样,接口也可以相互继承;
继承接口 多继承混合类型
一个对象可以同时做为 函数 和 对象 使用,并带有额外的属性,比如 Counter 这个 接口 规定了 可以作为 函数,并且这个函数还有额外的属性;
混合类型接口继承类
当接口继承了一个类类型时,它会继承类的成员但不包括其实现;
接口同样会继承到类的 private 和 protected 成员;
这意味着当你创建了一个接口继承了一个拥有 私有 或 受保护的成员 的类时,这个接口类型只能被这个类或其子类所实现(implement)。
接口继承类函数
基本示例类型推断
在赋值语句的一边指定了类型但是另一边没有类型的话,TypeScript编译器会自动识别出类型:
类型推断可选参数 、默认参数 和 剩余参数
可选参数 、默认参数 和 剩余参数注意:
JavaScript 里,每个参数都是可选的,可传可不传。 没传参的时候,它的值就是 undefined。
可选参数必须跟在必须参数后面。
在 TypeScript 里,我们也可以为参数提供一个默认值当用户没有传递这个参数或传递的值是 undefined 时。 它们叫做有默认初始化值的参数。
函数的重载
JavaScript 本身是个动态语言。 JavaScript 里函数根据传入不同的参数而返回不同类型的数据是很常见的。
在 Typescript 中 为 同一个函数提供多个 函数类型定义 来进行函数重载。 编译器会根据这个列表去处理函数的调用;
重载的 pickCard 函数在调用的时候会进行正确的类型检查;
函数的重载为了让编译器能够 选择正确的检查类型,它与 JavaScript 里的处理流程相似。 它查找重载列表,尝试使用第一个重载定义。 如果匹配的话就使用这个。 因此,在定义重载的时候,一定要把最精确的定义放在最前面。
注意,function pickCard(x): any 并不是重载列表的一部分,因此这里只有 两个重载:一个是接收对象另一个接收数字。 以其它参数调用 pickCard 会产生错误。
类
基础类的继承
同 JavaScript 一样, 使用 extends 关键字;
公共,私有与受保护的修饰符
public 允许在 类内外 使用(未标明修饰符的属性和方法 一般都是 public)
private 允许在 类内 被使用
protected 允许在 类内 及 继承的子类 中使用
readonly 修饰符
参数属性
参数属性可以方便地让我们在一个地方定义并初始化一个成员;但是在参数多的情况下 还是推荐第二种写法,更直观;
参数属性存取器
核心原理还是使用的 Object.defineProperty 方法的 get 和 set(vue2 的 核心原理);
存取器类的静态属性
创建类的 静态成员,这些属性存在于类本身上面而不是类的实例上;
静态方法包含 this 关键字,这个 this 指的是类;
父类的静态方法,可以被子类继承。
单例模式抽象类
abstract 关键字
抽象类做为其它派生类的基类使用。 它们 一般不会直接被实例化。
抽象类中的抽象方法 不包含具体实现 并且 必须在派生类中实现。 抽象方法的语法与接口方法相似。 两者都是定义方法签名但不包含方法体;
注意: 不能创建一个抽象类的实例;
抽象类把类当接口使用
一般还是 不推荐 使用
把类当接口使用泛型
定义函、接口、类 先不指定类型 ,而是在使用的时候指定类型;
泛型接口
泛型接口泛型类
泛型类泛型约束
泛型约束
网友评论