ts的类型兼容性

简介: ts的类型兼容性

你要的我有就可以,没有就不行

接口兼容性

interface Person1 {
  name: string
}
interface Person2 {
  name: string;
  age: number;
}

let obj1: Person1 = {
  name: 'xxx'
}

let obj2: Person2 = {
  name: 'xxx',
  age: 18
}

obj2 = obj1 // 错误:无法赋值,因为缺少属性,多了不影响,但是少了属性绝对不行

obj1 = obj2 是可以的

基本类型的兼容性

let num1: number
let num2: number | string

num1 = 10;
num2 = 'xxx'

num1 = num2 // 错误:无法赋值,因为缺少类型,多了不影响,但是少了类型绝对不行

num2 = num1 是可以的

类的兼容性

class Animal {
  name: string
}
class Bird extends Animal {
  age: number
}

let a: Animal;
let b = Bird;

b = a  // 错误:无法赋值,因为缺少类型,多了不影响,但是少了类型绝对不行

a = b 是可以的

函数的兼容性

type Func = (a: number, b: number) => number;

let sum: Func;
function f1 (a: number, b: number):void {
 // todo
}

sum = f1 // 错误:无法赋值,因为返回值类型不同

除了对比参数,还要对比返回值

type Func = (a: number, b: number) => number;

let sum: Func;
function f1 (a: number, b: number, c: number):number {
  return a
}

sum = f1 // 错误:无法赋值,多了参数不行,但是少参数可以
type GetPerson = () => {name: string, age: number};
let getPerson :GetPerson;
function g1 () {
  return {name: 'xxx'}
}
function g2 () {
  return {name: 'xxx', age: 18}
}
function g3 () {
  return {name: 'xxx', age: 18, sex: 1}
}

// getPerson = g1; 报错
// getPerson = g2; 正常
// getPerson = g3 正常

参数可以传自己和自己的父类,返回值可以传自己和自己的子类

相关文章
|
弹性计算 安全 Linux
Linux服务器总是被暴力破解,用fail2ban来加强防护(用法详解)
Linux服务器总是被暴力破解,用fail2ban来加强防护(用法详解)
Linux服务器总是被暴力破解,用fail2ban来加强防护(用法详解)
|
消息中间件 前端开发 安全
简化部署流程:Rainbond让Jeepay支付系统部署更轻松
在如今的开发环境中,部署一套像 Jeepay 这样的 Java 支付系统往往需要开发者面对繁琐的配置、依赖环境管理以及服务的高可用性保障,手动部署和运维变得异常艰巨和费时。然而,借助 Rainbond 这样的云原生 PaaS 平台,这一过程变得前所未有的简单。通过 Rainbond 的“点点点”式应用管理和自动化运维功能,开发者可以轻松完成 Jeepay 系统的部署,极大减少了传统的部署难度和复杂性,让你更专注于业务的快速迭代和创新。 本文将详细介绍如何通过 Rainbond 平台一步步部署 Jeepay 系统,无需复杂的配置,只需简单操作即可完成,帮助开发者快速构建一个稳定、安全的支付系统
简化部署流程:Rainbond让Jeepay支付系统部署更轻松
开发指南063-上传文件到百度网盘
赛事平台中需要下载伴奏文件。伴奏文件是选手通过小程序上传到minio中的。
|
测试技术
提升软件测试效率的五大策略
【10月更文挑战第13天】 本文将探讨如何通过优化测试流程、引入自动化测试、加强测试用例设计、培养高素质测试团队和持续反馈改进等五大策略,来显著提升软件测试的效率。这些方法不仅适用于不同类型的软件项目,还能有效降低测试成本,提高软件质量。
1262 0
|
数据库 C# 开发者
WPF开发者必读:揭秘ADO.NET与Entity Framework数据库交互秘籍,轻松实现企业级应用!
【8月更文挑战第31天】在现代软件开发中,WPF 与数据库的交互对于构建企业级应用至关重要。本文介绍了如何利用 ADO.NET 和 Entity Framework 在 WPF 应用中访问和操作数据库。ADO.NET 是 .NET Framework 中用于访问各类数据库(如 SQL Server、MySQL 等)的类库;Entity Framework 则是一种 ORM 框架,支持面向对象的数据操作。文章通过示例展示了如何在 WPF 应用中集成这两种技术,提高开发效率。
398 0
|
Web App开发 移动开发 Ubuntu
HTML5 Web Speech API,让网站更有趣
Web API 变得越来越丰富,其中一个值得注意的是Web Speech API。传统的网站只能“说”,这个API的出现,让网站能“倾听”用户。这个功能已经开放了一系列的用法,非常棒。
940 0
HTML5 Web Speech API,让网站更有趣
|
存储 机器学习/深度学习 分布式计算
利用PAI助力打造新一代社交推荐平台
本次主题的内容主要分三点介绍,第一是伊对的简介,第二是推荐平台的架构简介,第三是PAI在推荐平台的应用。
3263 0
利用PAI助力打造新一代社交推荐平台
|
弹性计算 Kubernetes 监控
CloudIaC 漂移检测功能详解
云霁CloudIaC 是一款开源的基于terraform 的低代码平台管理库,本篇文章主要介绍其中关于配置漂移的处理方式。
2147 1
|
存储 缓存 资源调度
蚂蚁大规模 Sigma 集群 Etcd 拆分实践
为了支撑蚂蚁业务的迭代升级,蚂蚁基础设施今年启动了 Gzone 全面云化项目。要求 Gzone 需与已经云化的 Rzone 合并部署在同一个集群,Sigma 单集群实际管理的节点规模将超过万台,单集群承担的业务也将更加复杂。
蚂蚁大规模 Sigma 集群 Etcd 拆分实践
|
SQL 存储 分布式计算
CDP 的 Hive Metastore 简介
Hive Metastore (HMS) 是一种服务,用于在后端 RDBMS(例如 MySQL 或 PostgreSQL)中存储与 Apache Hive 和其他服务相关的元数据。
CDP 的 Hive Metastore 简介