深入理解TS(5)—— 字面量类型

本文深入探讨了TypeScript中的字面量类型,包括字符串字面量、boolean字面量和number字面量。通过示例说明如何使用字面量类型,并解决了在使用过程中可能出现的类型不匹配问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

字面量类型

字面量类型

TS支持将一个字面量当成一个类型使用。

  • let foo: ‘Hello’;

  • foo变量的类型是 ‘Hello’,它只能兼容字面量值为 ‘Hello’ 的变量,也只能接受 ‘Hello’ 作为赋值数据。

    let foo: 'Hello';
    foo = 'Hello'
    foo = 'a' //不能将'a'分配给'Hello'类型
    
    

TS提供3种字面量类型

字符串字面量类型

  • 字符串字面量类型就是使用字符串字面量作为类型。

    • 实际上单个的字符串字面量类型并不是很有用,但是可以使用联合类型将多个字符串字面量组合成一个类型(形成类似于字符串枚举的作用)。

      type CardinalDirection = 'North' | 'East' | 'South' | 'West';
      
      function move(distance: number, direction: CardinalDirection)
      {
      
      }
      
      move(1,'North')
      
      enum States{
          North = 'north',
          East = 'east',
          South = 'south',
          West = 'west'
      }
      
      function move1(distance: number, direction: States)
      {
      
      }
      move1(1,States.North)
      

boolean字面量类型

  • type OneToFive = 1 | 2 | 3 | 4 | 5;

number字面量类型

  • type Bools = true | false;

使用字面量类型常见报错及解决方法

在使用字面量类型的时候,我们有时会遇到类似于 string类型不能被赋值给’foo’类型的报错。

function isFoo(arg: 'foo')
{

}

const Obj = {
    someProp: 'foo',
}

isFoo(Obj.someProp) // 类型“string”的参数不能赋给类型“"foo"”的参数。
  • 报错产生原因

    • someProp的值是‘foo’,所以它的类型被推断为string类型。
  • 解决报错的2个方法

    • 使用类型断言。

      function isFoo(arg: 'foo')
      {
      
      }
      
      const Obj = {
          someProp: 'foo' as 'foo',
      }
      
      isFoo(Obj.someProp)
      
    • 使用interface 或 type做结构化的类型注解。

      function isFoo(arg: 'foo')
      {
      
      }
      
      type objType = {
          someProp: 'foo';
      }
      
      const Obj: objType = {
          someProp: 'foo',
      }
      
      isFoo(Obj.someProp)
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值