美文网首页
Typescript夜点心:类型推断的策略

Typescript夜点心:类型推断的策略

作者: 前端夜点心 | 来源:发表于2020-03-07 13:45 被阅读0次
TS.png

今天的夜点心关于 Typescript 的类型推断策略

熟悉 Typescript 的朋友都知道,TS 具有一套类型推断系统来帮助减少不必要的类型声明。即使是面对纯 JS 代码,TS 也能通过类型推断系统给每个变量自动套上一个默认类型。

那么你知道下面的 a, b, c.prop, D.prop 四个量的类型推断结果分别是什么吗?

const a = 'a';

let b = 'a';

const c = {
  prop: 'a'
};

class D {
  static prop = 'a'
}

看起来都差不多?如果用他们给下面的变量赋值又会发生什么呢?

type Abc = 'a' | 'b' | 'c';

const a1: Abc = a;

const b1: Abc = b; // error!

const c1: Abc = c.prop; // error!

const d1: Abc = D.prop; // error!

会发现除了 a1 这一句赋值语句外,其他的赋值语句都报错了!

原因就是除了变量 a 被推断成了单值类型 'a',其余的 b, c.propD.prop 都被推断成了字符串类型 string

而从类型的范围来看 string > Abc > 'a'

所以对 a1的赋值是成立的, 而其他的赋值就报错了。

为什么对于看似类似的情形,TS 的推断结果会有差别呢

根本原因在于 TS 会根据一个值在后续的逻辑中是否可能被修改而给出不同的类型推断结果:

  • 对于有 可能被修改 的值,TS 采用较为宽松的类型推断策略,即把上述 b, c.prop, D.prop 推断为较为宽泛的 string 类型,这使未来可能出现的赋值具有更大的灵活度
  • 对于 不可能被重新赋值 的值,TS 采用较为严格的类型推断策略,即把上述 a 推断为单值类型 'a',这样未来把 a 赋值给别的变量时,出现类型检查错误的可能性更小

不同的出发点和情形,造成了两种不同的类型推断策略。

最后在理解了上述策略后,让我们对 D 做一个修改,验证一下 TS 的推断逻辑:

class D2 {
  static readonly prop = 'a';
}

const d2: Abc = D2.prop; // 这次不再报错了!

通过 readonly 关键字的添加,标定了 prop 字段是不可更改的,从而触发了更严格的推断策略,让 D.prop 被推断成了单值类型 'a'

扩展阅读

Improved Inference for Literal Types in TypeScript

相关文章

  • Typescript夜点心:类型推断的策略

    今天的夜点心关于 Typescript 的类型推断策略 熟悉 Typescript 的朋友都知道,TS 具有一套类...

  • 类型推断

    类型推断 介绍 这节介绍TypeScript里的类型推断。即,类型是在哪里如何被推断的。 官方文档[https:/...

  • TypeScript学习——类型推断、联合类型

    类型推断 如果没有明确的指定类型,那么TypeScript会依照类型推论的规则推断出一个类型 什么是类型推断 上面...

  • TypeScript 高级(一)

    类型推断 基于赋值表达式推断类型的能力称之为“类型推断”。 在 TypeScript 中,具有初始化值的变量、有默...

  • TypeScript 之类型推论

    介绍 TypeScript 类型推论:即类型是在哪里如何被推断的。 基础 TypeScript 里,在有些没有明确...

  • TypeScript: 低维护类型

    typescript 具有类型推断能力,所以在 typescript 中编写常规的 JavaScript 时很多类...

  • Typescript类型注解/类型推断

      TypeScript是微软开发的一个开源的编程语言,通过在JavaScript的基础上添加静态类型定义构建而成...

  • TypeScript 07 - 类型推断

    基础 最佳通用类型 上下文类型 1. 基础 在 TS 中未明确指出类型的地方,TS 会帮助提供类型,当初始化变量和...

  • TypeScript中的类型注解和类型推断

    在TypeScript中有两个基本概念: 类型注解和类型推断,这两个概念在我们编写TypeScript代码时会一直...

  • 第八节: TypeScript 类型推断

    1. 类型推断 1.1 类型推论了解 类型推论是指 在没有明确指出类型的地方TypeScript可以根据默写规则自...

网友评论

      本文标题:Typescript夜点心:类型推断的策略

      本文链接:https://www.haomeiwen.com/subject/hzccdhtx.html