TypeScript精华精讲(接口与泛函)

目录

一、接口

1. Interface 接口类型

(1) 接口类型的基本使用

(2) 可缺省属性

(3) 只读属性

(4) 定义函数类型

(5) 索引签名

2. Type 类型别名

3. one question

二、泛型

1. 泛型类型参数

2. 泛型类

3. 泛型类型

4. 泛型约束


一、接口

1. Interface 接口类型

(1) 接口类型的基本使用

如下定义一个接口类型:

/ ** 关键字 接口名称 */
interface ProgramLanguage {
  /** 语言名称 */
  name: string;
  /** 使用年限 */
  age: () => number;
}

现在我们就可以直接使用 ProgramLanguage 接口来定义参数的类型了:

function NewStudy(language: ProgramLanguage) {
  console.log(`ProgramLanguage ${language.name} created ${language.age()} years ago.`);
}

我们还可以通过复用接口类型定义来约束其他逻辑。比如,我们通过如下所示代码定义了一个类型为 ProgramLanguage 的变量 TypeScript :

let TypeScript: ProgramLanguage;

(2) 可缺省属性

/** 关键字 接口名称 */
interface OptionalProgramLanguage {
  /** 语言名称 */
  name: string;
  /** 使用年限 */
  age?: () => number;
}
let OptionalTypeScript: OptionalProgramLanguage = {
  name: 'TypeScript'
}; // ok

当属性被标注为可缺省后,它的类型就变成了显式指定的类型与 undefined 类型组成的联合类型,比如示例中 OptionalTypeScript 的 age 属性类型就变成了如下所示内容:

(() => number) | undefined;

(3) 只读属性

interface ReadOnlyProgramLanguage {
  /** 语言名称 */
  readonly name: string;
  /** 使用年限 */
  readonly age: (() => number) | undefined;
}
let ReadOnlyTypeScript: ReadOnlyProgramLanguage = {
name: 'TypeScript',
age: undefined
}
/** ts(2540)错误,name 只读 */
ReadOnlyTypeScript.name = 'JavaScript';

(4) 定义函数类型

在以上示例中,你可能会觉得接口类型仅能用来定义对象的类型,但是接口类型还可以用来定义函数的类型 (仅仅是定义函数的类型,而不包含函数的实现),具体示例如下:

interface person {
    name: 'zyj',
    age: 20
}
interface func {
    (persona: person): void
}

let printmessage: func = persona => { console.log(`我是${persona.name},我的年龄是${persona.age}岁`)}

我们定义了一个接口类型 func,它有一个函数类型的匿名成员,函数参数类型 person,返回值的类型是 void,通过这样的格式定义的接口类型又被称之为可执行类型,也就是一个函数类型。

然后我们声明了一个 func 类型的变量,并赋给它一个箭头函数作为值。根据上下文类型推断,赋值操作左侧的 func 类型是可以约束箭头函数的类型,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Frank.30

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值