yaoningvital / blog

my blog
31 stars 4 forks source link

TypeScript -- Type Aliases #189

Open yaoningvital opened 4 years ago

yaoningvital commented 4 years ago

原文地址:http://www.typescriptlang.org/docs/handbook/advanced-types.html

类型别名(Type Aliases)为一个类型创建一个新的名称。

类型别名有时比较类似于“接口”,但是它可以命名 原始类型、联合类型、元祖类型(Tuples)、和其他你必须手写的类型。

example 1

type Name = string
type NameResolver = () => string;
type NameOrResolver = Name | NameResolver

function getName(n: NameOrResolver): Name {
    if (typeof n === 'string') {
        return n
    }
    return n()

}

别名并没有实际上创建一个新的类型,它只是创建了一个新的名称来引用那个类型。

和接口一样,类型别名也可以是泛型:

type Container<T> = { value: T }

可以在一个属性中,用类型别名引用一个类型别名自身:

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

总结: 1、如果interface 和 type 都可实现,尽可能地使用 interface。 2、如果用 interface 不能实现的类型描述,才用 type 别名。