TypeScript类型与编程实践解析

TypeScript类型与编程实践解析

1、现在你的环境已经搭建好,在代码编辑器中打开 src/index.ts 文件。输入以下代码:let a = 1 + 2; let b = a + 3; let c = { apple: a, banana: b }; let d = c.apple * 4。然后将鼠标悬停在 a、b、c 和 d 上,TypeScript 会自动推断这些变量的类型,请问 a、b、c、d 分别是什么类型?

将鼠标悬停在 a b c d 上,TypeScript 能自动推断出各变量的类型:

  • a 为数字类型
  • b 为数字类型
  • c 是具有特定结构的对象类型
  • d 同样为数字类型

2、扩展我们开发的“工厂模式”实现,以使其更安全,但会在一定程度上破坏抽象性。更新实现,让使用者在编译时就知道调用 Shoe.create('boot') 返回的是 Boot ,调用 Shoe.create('balletFlat') 返回的是 BalletFlat (而不是两者都返回 Shoe )。提示:回顾“重载函数类型”。

可使用重载函数类型来更新 Shoe.create 方法,让使用者在编译时明确不同输入对应的返回类型。示例代码如下:

// 重载定义
function create(type: 'balletFlat'): BalletFlat;
function create(type: 'boot'): Boot;
function create(type: 'sneaker'): Sneaker;
function create(type: 'balletFlat' | 'boot' | 'sneaker'): Shoe {
  switch (type) {
    case 'balletFlat':
      return new BalletFlat();
    case 'boot':
      return new Boot();
    case 'sneaker':
      return new Sneaker();
  }
}

let Shoe = {
  create
};

这样,当调用 Shoe.create('boot') 时,编译时就知道返回的是 Boot 类型;调用 Shoe.create('balletFlat') 时,返回的是 BalletFlat 类型。

3、对于以下每对类型,判断第一个类型是否可赋值给第二个类型,并说明原因。从子类型和变体的角度思考这些问题:a. 1和number b. number和1 c. string和number | string d. boolean和number e. number[]和(number | string)[] f. (number | string)[]和number[] g. {a: true}和{a: boolean} h. {a: {b: [string]}}和{a: {b: [number | string]}} i. (a: number) => string和(b: number) => string j. (a: number) => string和(a: string) => string k. (a: number | string) => string和(a: string) => string l. E.X(定义在枚举enum E {X = ‘X’}中)和F.X(定义在枚举enum F {X =

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值