一文读懂TypeScript类型兼容性

本文介绍了TypeScript中的类型兼容性,包括基于结构类型的兼容性原则,特殊类型(any, never, unknown)的兼容性,函数类型的兼容性规则,枚举、类和泛型的兼容性,并通过实例说明了各种兼容性的应用。通过理解这些概念,可以帮助开发者避免在TypeScript开发中出现类型错误。" 133570669,19671514,使用Python和Scapy编程调整Wi-Fi频率,"['Python编程', 'Wi-Fi控制', '网络编程', 'Scapy库', '前端开发']
摘要由CSDN通过智能技术生成

大家好,我是 CUGGZ。

JavaScript 是一门弱类型语言,它对类型是弱校验,正因为这个特点,所以才有了TypeScript这个强类型语言系统的出现,来弥补类型检查的短板。TypeScript在实现类型强校验的同时,还要满足 JavaScript 灵活的特点,所以就有了类型兼容性这个概念。了解类型兼容性可以避免在实际的开发中出现一些低级错误。下面就来看看类型兼容性的概念和分类。

1、类型兼容性的概念

所谓的类型兼容性 用于确定一个类型是否能赋值给其他类型 。TypeScript中的类型兼容性是 基于结构类型 的,结构类型是一种只使用其成员来描述类型的方式。其基本原则是, 如果 x 要兼容 y,那么 y 至少要具有与 x 相同的属性。

下面来看一个例子,构建一个 Teacher 类 ,然后声明一个接口 Student,Student 的属性 Teacher 都有,而且还多了其他的属性,这种情况下 Student 就兼容了 Teacher:

class Teacher {
    constructor(public weight: number, public name: string, public job: string) {
    
    }
}
interface Student {
    name: string
    weight: number
}
let x: Student;
x = new Teacher(120, 'TS', 'teacher') // :white_check_mark:

如果反过来,Teacher 并没有兼容 Student,因为 Student 的属性比 Person 少一个。

2、特殊类型的类型兼容性

先来看看 TypeScript 中一些特殊类型的类型兼容性。

(1)any

any 类型可以赋值给除了 never 之外的任意其他类型,反过来其他类型也可以赋值给 any。也就是说 any 可以兼容除了 never 之外的所有类型,同时也可以被所有的类型兼容。

let any: any;
let a: number = any;       // :white_check_mark:
let b: {} = any;           // :white_check_mark:
let b: () => number = any; // :white_check_mark:

(2)never

never 类型可以赋值给任何其他类型,但不能被其他任何类型赋值。

let never: never = (() => {
  throw Error('never');
})();

let a: number = never;       // :white_check_mark:
let b: () => number = never; // :white_check_mark:
let c: {} = never;           // :white_check_mark:

可以看到,这里将 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值