接口 vs 类型别名

简介: 接口 vs 类型别名

类型别名会给一个类型起个新名字。 类型别名有时和接口很像,但是可以作用于原始值,联合类型,元组以及其它任何你需要手写的类型。

type Name = string;
type NameResolver = () => string;
type NameOrResolver = Name | NameResolver;
function getName(n: NameOrResolver): Name {
    if (typeof n === 'string') {
        return n;
    }
    else {
        return n();
    }
}

起别名不会新建一个类型,只是创建了一个新名字来引用那个类型。 给原始类型起别名通常没什么用,只是一种使用形式。

同接口一样,类型别名也可以是泛型,我们可以添加类型参数并且在别名声明的右侧传入:

type Container<T> = { value: T };

我们也可以使用类型别名来在属性里引用自己:

type Tree<T> = {
    value: T;
    left: Tree<T>;
    right: Tree<T>;
}

然而,类型别名不能出现在声明右侧的任何地方。

type Yikes = Array<Yikes>; // error

像我们提到的,类型别名可以像接口一样;然而,仍有一些细微差别。

另一个重要区别是类型别名不能被 extends 和 implements(自己也不能 extends 和 implements 其它类型)。 因为 软件中的对象应该对于扩展是开放的,但是对于修改是封闭的,你应该尽量去使用接口代替类型别名。

字符串字面量类型允许你指定字符串必须的固定值。 在实际应用中,字符串字面量类型可以与联合类型,类型保护和类型别名很好的配合。 通过结合使用这些特性,你可以实现类似枚举类型的字符串。

type Easing = "ease-in" | "ease-out" | "ease-in-out";
相关文章
|
API 开发者
百度批量算路功能使用
百度批量算路功能使用
232 0
|
11月前
|
机器学习/深度学习 PyTorch TensorFlow
使用Python实现智能食品质量检测的深度学习模型
使用Python实现智能食品质量检测的深度学习模型
494 1
|
监控 数据挖掘 数据安全/隐私保护
ERP系统中的固定资产管理
【7月更文挑战第25天】 ERP系统中的固定资产管理
610 3
|
机器学习/深度学习 数据采集 人工智能
【人工智能课程】计算机科学博士作业一
本文是一份人工智能课程作业指南,详细描述了使用深度神经网络构建回归模型的任务,包括数据预处理、特征选择、模型构建、训练、评估和优化的全过程,并提供了相应的PyTorch代码实现。
174 2
【人工智能课程】计算机科学博士作业一
|
存储 Kubernetes 调度
深入理解 Pod 的核心知识
【2月更文挑战第27天】
|
JavaScript 前端开发
JS : 柯里化 分布传参给函数
JS : 柯里化 分布传参给函数
|
Cloud Native Devops 持续交付
构建未来:云原生架构在企业数字化转型中的关键作用
【5月更文挑战第30天】 随着企业加速其数字化进程,云原生架构已成为实现敏捷性、可扩展性和弹性的关键技术。本文将探讨云原生技术如何助力企业构建灵活的IT环境,支持快速迭代和持续交付,同时确保系统的稳定性与安全性。通过深入分析容器化、微服务、DevOps和持续集成/持续部署(CI/CD)等核心技术,揭示这些元素如何相互协作,推动企业在竞争激烈的市场中保持领先。
|
数据挖掘
高性能计算集群的主要应用场景
本文主要介绍弹性高性能计算集群的主要应用场景,您可以根据不同的应用场景配置不同的资源类型。
369 0
|
存储 Unix Linux
|
消息中间件 安全 网络安全
【网络安全 | Kali】基于Docker的Vulhub安装教程指南
【网络安全 | Kali】基于Docker的Vulhub安装教程指南
547 1