前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TypeScript-类型别名和类型别名、接口异同

TypeScript-类型别名和类型别名、接口异同

原创
作者头像
杨不易呀
发布2023-09-28 19:33:16
1830
发布2023-09-28 19:33:16
举报
文章被收录于专栏:杨不易呀杨不易呀

类型别名概述

类型别名就是给一个类型起个 新名字, 但是它们都代表 同一个类型 例如: 你的本名叫张三, 你的外号叫小三, 小三就是张三的别名, 张三和小三都表示同一个人

代码语言:typescript
复制
type MyString = string;
let value: MyString;
value = 'abc';
value = 123;
value = false;

如上代码的含义为给 string 类型起了一个别名叫做 MyString, 那么将来无论是 MyString 还是 string 都表示 string 也就是说将来你使用 MyString 别名作为变量的类型那么改变量就只能存储字符串类型的数据像如上的示例代码我赋值了其它类型的数据其实在编译器当中已经报错了如下:

image-20211204102652712
image-20211204102652712

类型别名也可以使用 泛型

代码语言:typescript
复制
type MyType<T> = { x: T, y: T };
let value: MyType<number>;
value = {x: 123, y: 456};
value = {x: '123', y: 456};
value = {x: false, y: 456};

如上代码的含义为,定义了一个对象泛型别名,该对象当中有两个属性 x、y, 然后定义了一个该别名的变量,泛型类型指定的为 number 那么就不能在存储其它类型的值,如上代码有部分是报错的,如下:

image-20211204103951440
image-20211204103951440

可以在类型别名类型的属性中使用自己 一般用于定义一些 树状结构 或者 嵌套结构 的数据结构

代码语言:typescript
复制
type MyType = {
    name: string,
    children?: MyType
}
let value: MyType = {
    name: 'one',
    children: {
        name: 'one',
        children: {
            name: 'one',
        }
    }
}

如上代码当中使用到了可选参数不然会一直循环的定义下去。

接口和类型别名是相互兼容的

代码语言:typescript
复制
type MyType = {
    name: string
}

interface MyInterface {
    name: string
}

let value1: MyType = {name: 'yangbuyiya'};
let value2: MyInterface = {name: 'zs'};
value1 = value2;
value2 = value1;

接口和类型别名的异同

都可以描述 属性方法

代码语言:typescript
复制
type MyType = {
    name: string;
    say(): void;
}

interface MyInterface {
    name: string;

    say(): void;
}

都允许 扩展

interface:

代码语言:typescript
复制
interface MyInterface {
    name: string;

    say(): void;
}

interface MyInterface2 extends MyInterface {
    age: number;
}

let value: MyInterface2 = {
    name: 'yangbuyiya',
    age: 18,
    say(): void {

    }
}

type 利用一个 & 来实现扩展:

代码语言:typescript
复制
type MyType = {
    name: string;
    say(): void;
}
type MyType2 = MyType & {
    age: number;
}
let value: MyType2 = {
    name: 'yangbuyiya',
    age: 18,
    say(): void {

    }
}

不同点

type 可以声明 基本类型 别名,联合类型元组 等类型, interface 不能

代码语言:typescript
复制
type MyType1 = boolean;
type MyType2 = string | number;
type MyType3 = [string, boolean, number];

type 不会自动合并

interface 的自动合并可查看 TypeScript 当中的 30.TypeScript-接口合并现象 这里就只演示 type 的不会自动合并的不同点:

image-20211204111616084
image-20211204111616084
代码语言:typescript
复制
type MyType = {
    name: string
}
type MyType = {
    age: number
}

最后

本期结束咱们下次再见?~

? 关注我不迷路,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎在评论区留言,我一般看到都会回复的。大家点赞支持一下哟~ ?

我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表

输入图片说明
输入图片说明

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 类型别名概述
  • 接口和类型别名的异同
  • 不同点
  • 最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com