码迷,mamicode.com
首页 > 其他好文 > 详细

typeScript面对对象篇二

时间:2018-08-31 10:43:04      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:ova   more   ext   type   前端   entity   现在   ntb   规则   

接口

接触过面向对象的后端语言的应该对接口很熟悉,只接触过前端的对接口会有点陌生,在维基百科中对OOP中接口的定义是这样的:

  在面向对象的语言中,术语interface经常被用来定义一个不包含数据和逻辑代码但用函数签名定义了行为的抽象类型。

实现一个接口可以被看成是签署了一份协议,接口好比是协议,当我们签署它时,必须遵守它的规则,接口的规则是方法和属性的签名,我们不想实现它们。

在typescript中最常用到接口的场景是用接口作为参数的类型检查。

 interface BaseButtonProps {
  icon: string;
}
function printButton(buttonProps: BaseButtonProps) {
  console.log(buttonProps.icon);
}
let myObj = {icon:‘add‘};
printButton(myObj);

在调用printButtonh函数的时候类型检查器会查看参数对象是要求包含icon属性的。

可选属性

用?来这个属性是可选属性

 interface BaseButtonProps {
  icon?: string;
}

只读属性

属性名前用 readonly来指定只读属性

 interface BaseButtonProps {
   readonly icon?: string;
}

泛型类型

先看下简单泛型

function greetNane<T>(name:T):T{
    return name
}

let myIdentity: <T>(name: T) => T = greetNane;

我们还可以使用带有调用签名的对象字面量来定义泛型函数:

function greetNane<T>(name:T):T{
    return name
}
let myIdentity: {<T>(name: T): T} = greetNane;

这引导我们去写第一个泛型接口了。 我们把上面例子里的对象字面量拿出来做为一个接口:

interface GenericIdentityFn<T> {
    (arg: T): T;
}

function greetNane<T>(name:T):T{
    return name
}

let myIdentity: GenericIdentityFn<number> = greetNane;

泛型类

class GenericNumber<T> {
    zeroValue: T;
    add: (x: T, y: T) => T;
}

let myGenericNumber = new GenericNumber<number>();
myGenericNumber.zeroValue = 0;
myGenericNumber.add = function(x, y) { return x + y; };

泛型类看上去与泛型接口差不多。 泛型类使用( <>)括起泛型类型,跟在类名后面。

泛型约束

interface Lengthwise {
    length: number;
}

function loggingIdentity<T extends Lengthwise>(arg: T): T {
    console.log(arg.length);  // Now we know it has a .length property, so no more error
    return arg;
}

现在这个泛型函数被定义了约束

typeScript面对对象篇二

标签:ova   more   ext   type   前端   entity   现在   ntb   规则   

原文地址:https://www.cnblogs.com/hetaojs/p/9563927.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!