当前位置: 首页 > news >正文

医院网站建设方案详细网站建设数据库的购买

医院网站建设方案详细,网站建设数据库的购买,国外ip代理,wordpress进入中国市场困惑 初学 ts 时,extends 让我很困惑:有时它代表 扩大 ,有时代表 缩小 。举几个例子说明: 例1: class Animal {} class Dog extends Animal {}这是 js 本身就有的 class 继承语法,很熟悉了。 Dog 是 An…

困惑

初学 ts 时,extends 让我很困惑:有时它代表 扩大 ,有时代表 缩小 。举几个例子说明:

例1:
class Animal {} 
class Dog extends Animal {}

这是 js 本身就有的 class 继承语法,很熟悉了。
Dog 是 Animal 的子类,是对 Animal 的扩展,可以比 Animal 有更多的属性和方法。
extends 似乎代表 扩大

例2:
type MyPick<T, K extends keyof T> = {[P in K]: T[P];
};

K extends keyof T 的含义是“K 是 keyof T 的子集”。K 的取值被限制在 keyof T 内,可以少,不能多。
extends 似乎代表 缩小

例3:
function longest<T extends { length: number }>(a: T, b: T) {return a.length >= b.length ? a : b;
}

T extends { length: number } 要求 T 必须有 length 属性,这样在函数体中才可以直接使用 a.length 和 b.length。
T 除了 length,还可以有其他属性和方法。
extends 似乎代表 扩大


解释

说扩大或者缩小其实含义很模糊,没有实际意义。因为没有明确主语:具体是什么扩大/缩小了。

ts 中的 extends 应该用 子类型(assignable) 去理解。

子类型:如果在期望类型 T 的实例的任何地方,都可以安全地使用类型 S 的实例,那么称类型 S 是类型 T 的子类型。

如果我们能够把任何值赋给类型 T,那么称 T 为顶层类型。其他任何类型都是 T 的子类型。ts 中的顶层类型是 unknown,java 中的顶层类型是 Object

如果类型 T 是其他任何类型的子类型,那么称 T 为底层类型。ts 中的底层类型是 never,是不能被赋值的空类型。可以类比集论中的概念:空集是任何集合的子集。

大白话总结:unknown 是终极父类,never 是终极子类。

所以,子类型 extends 父类型,至于是扩大还是缩小要看考虑问题的角度。用上面的例1说明:

class Animal {} 
class Dog extends Animal {}
  • Dog 比 Animal 有更多的属性和方法。这个角度看,Dog 是对 Animal 的扩展。
  • Dog 对 Animal 加了限制,所以 Dog 能取的值比 Animal 要少:Dog 一定是 Animal,但 Animal 不一定是 Dog。这个角度看,Dog 是对 Animal 的缩小

大白话总结:子类特性多了,可取值少了。


引申

前提 Dog extends Animal,考虑下面几种类型的关系:

  • Dog[]Animal[] 的关系
  • () => Dog() => Animal 的关系
  • (arg:Dog) => void(arg:Animal) => void 关系

答案:

  • Dog[]Animal[] 的子类型
  • () => Dog() => Animal 的子类型
  • (arg:Animal) => void(arg:Dog) => void 的子类型。注意这里反过来了。稍微有点绕,用 assignable 的思路去考虑

另外,ts 中强行规定了 (arg:Dog) => void 也是 (arg:Animal) => void 的子类型。这样是不安全的,运行时可能出错。但是 ts “为了方便实现常见的js编程模式“,就是这样设计了。


最后说一说 ts 中的 any。虽然 any 和 unknown 常被放在一起讨论,但其实性质完全不同。在 ts 中,unknownnever 都是正规的类型体系的一部分。但 any 完全在这个体系之外:

ts 中,所有值都可以赋给 any 类型,any 类型的值也可以赋值给其他任何类型,从而绕过类型检查。

写代码时如果用了 any 类型,就代表着:我完全知道我在做什么,这一部分代码的安全与正确性我自己负责。ts 请无视这段代码,不要进行任何类型检查。

http://www.yayakq.cn/news/880074/

相关文章:

  • 潍坊市安丘网站建设怎么开电商店铺
  • 西安网站制作公司哪家好建筑工程网格化管理制度
  • 全中文网站开发暴雪游戏服务中心
  • 百讯科技网站建设广州软件开发招聘
  • 南宁网站建设公司怎么赚钱如何自己建公司网站
  • 免费空间说说赞领取网站网站开发中网页之间的链接形式有什么
  • 京东优惠券网站怎么做营销网站建设网站设计
  • 如何做网站授权怎样建立一个简单的网站
  • 株洲网络公司-网站建设怎么样wordpress如何修改版权
  • 网站制作价格做淘宝客网站域名是别人的
  • 网站建设第一步怎么弄中国进出口贸易平台
  • 佛山市三山新城建设局网站外贸网站推广收费
  • 华大 网站建设如何做一份企业网站规划
  • 长春电商网站建设哪家专业链接转换短网址
  • wordpress centos安装教程seo系统oem
  • 连云港网站优化方案有关商业网站的风格特征
  • wordpress 翻页功能宁波做网站优化哪家好
  • 无锡网站山西智能网站建设制作
  • 就业服务工作站建设规范python网站开发基础
  • 网站栏目英文做网站费用计入什么
  • 如何在vps上搭建网站网站开发工作量评估
  • 网站开发案例详解 源代码网站空间可以自己做吗
  • jsp做网站的优点重庆微网站开发公司
  • 网站设计的宽度公司网站制作一般多少钱
  • 网站的开发语言wordpress 主题显示图片
  • 网站生成海报功能怎么做网站点击率如何做
  • flash 3d 网站源码中企动力企业邮箱下载
  • 网站设置快捷键网站换域名有没有影响
  • 江夏区做网站三优科技 网站开发
  • 简单的网站建设方案杭州笕桥网站建设