接口 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";
相关文章
|
4月前
|
C++
C++一分钟之-类型别名与using声明
【7月更文挑战第20天】在C++中,类型别名和`using`声明提升代码清晰度与管理。类型别名简化复杂类型,如`using ComplexType = std::vector&lt;std::shared_ptr&lt;int&gt;&gt;;`,需注意命名清晰与适度使用。`using`声明引入命名空间成员,避免`using namespace std;`全局污染,宜局部与具体引入,如`using math::pi;`。恰当应用增强代码质量,规避常见陷阱。
66 5
|
6月前
|
JSON API 数据库
使用现代方式定义接口
【5月更文挑战第14天】FastAPI是一个现代化的、基于类型的web框架,用于构建API。它支持自动补全和类型检查,提供数据校验并能自动生成清晰的错误消息。 它基于OpenAPI标准,能自动生成交互式Swagger UI和ReDoc文档。 FastAPI内置安全性特性,支持身份验证,如HTTP基本认证和OAuth2。依赖注入系统使得复杂逻辑易于管理,同时兼容Starlette,具备高性能、WebSocket和GraphQL支持。
183 0
|
6月前
|
Python
定义字段
定义字段。
27 1
|
6月前
|
程序员 C语言
用户自定义结构体类型
用户自定义结构体类型
46 0
|
6月前
|
C++ 容器
C++开发之using定义模板别名
using 定义模板别名   都知道 typedef可以用来定义类型别名。例如typedef unsigned int uint_t; 相当于给unsigned int类型起了个别名uint_t
97 0
|
存储 JavaScript 编译器
TypeScript-类型别名和类型别名、接口异同
TypeScript-类型别名和类型别名、接口异同
59 0
|
SQL 分布式计算 大数据
Column 对象_操作_别名和类型 | 学习笔记
快速学习 Column 对象_操作_别名和类型
108 0
Column 对象_操作_别名和类型 | 学习笔记
|
编译器 Serverless C++
8000字超详解自定义结构体类型
8000字超详解自定义结构体类型
138 0
8000字超详解自定义结构体类型
|
存储 程序员 Go
Go基础:接口类型、接口嵌套、空接口、类型判断
Go基础:接口类型、接口嵌套、空接口、类型判断
225 0
Go基础:接口类型、接口嵌套、空接口、类型判断
|
存储 运维 算法
RH236创建不同类型的卷
RH236创建不同类型的卷
105 0
RH236创建不同类型的卷