TS学习(十) :TS中的type关键字

type定义:


Type又叫类型别名(type alias),作用是给一个类型起一个新名字,不仅支持interface定义的对象结构,还支持基本类型、联合类型、交叉类型、元组等任何你需要手写的类型。

type num = number; // 基本类型
type stringOrNum = string | number; // 联合类型
type person = {name: string}; // 对象类型
type user = person & { age: number } // 交叉类型
type data = [string, number]; // 元组
type fun = () => void; // 函数类型


type和interface的异同:


相同点


1.都可以用来描述一个对象或者函数

interface

interface user {name: string; age:number}; // 对象
 
interface setUser {(name: string; age:number):void}; // 函数


type       

type user = {name: string; age:number}; // 对象
 
type setUser = (name: string; age:number):void;//函数


2.都可以进行拓展

        interface可以扩展,type可以通过交叉实现interface的extends行为,interface可以extends type,同时type也可以与interface类型交叉 。

// interface通过extends实现继承
interface userName {
  name: string;
}
interface user extends userName {
  age: number
}
let stu:user = {name: 'wang', age: 10}
 
// interface的extends扩展可以通过type交叉(&)类型实现
type userName = {
   name: string;
}
type user = userName & {age: number}
let stu:user={name: 'wang', age: 18}
 
// interface扩展type
type name = {
  name: string;
}
interface user extends name {
  age: number;
}
let stu:user={name: 'wang', age: 89}
 
// type与interface交叉
interface name {
  name: string;
}
type user = name & {
  age: number;
}
let stu:user={name:'wang', age: 18}


不同点:


1.类型别名可以用于其它类型 (联合类型、元组类型、基本类型(原始值)),interface不支持

2.interface 可以多次定义来合并声明,type 不支持

interface user {
    name: string;
    age: number;
}
interface user {
    sex: string;
}
//user实际接口为:
{
    name: string;
    age: number;
    sex: string;
}


3.type 能使用 in 关键字生成映射类型,但 interface 不行

type keys = 'firstname' | 'surname';
 
type nameTypes = {
  [key in Keys]: string;
};
const test: nameTypes = {
  firstname: 'Pawel',
  surname: 'Grzybek',
};


4.默认导出方式不同

// inerface 支持同时声明,默认导出 而type必须先声明后导出
export default interface name {
  name: string;
};
// 同一个js模块只能存在一个默认导出
 type typeName = {name: string};
  export default typeName


5.在type中可以使用泛型

type Zoo<T> = T;
const num : Zoo<number> = 3;
 
type callback<T> = (data: T) => void;
6.type可以使用typeof获取实例类型

let div = document.createElement('div');
type divType = typeof div;
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TypeScript ,`type` 关键字可以用来声明类型别名、联合类型、交叉类型、函数类型等类型。下面是一些常见的 `type` 声明用法: 1. 声明类型别名 类型别名可以给一个类型起一个新的名字,方便在代码使用。例如: ```typescript type Name = string; type Age = number; type Person = { name: Name; age: Age; }; const person: Person = { name: 'Alice', age: 30 }; ``` 2. 声明联合类型 联合类型表示一个值可以是多种类型之一。例如: ```typescript type Gender = 'male' | 'female' | 'other'; type Person = { name: string; age: number; gender: Gender; }; const person: Person = { name: 'Alice', age: 30, gender: 'female' }; ``` 上面的代码,`Gender` 是一个联合类型,表示一个值只能是 `'male'`、`'female'` 或 `other` 三种字符串字面量类型之一。 3. 声明交叉类型 交叉类型可以把多个类型合并成一个类型。例如: ```typescript type Name = { first: string; last: string; }; type Age = { age: number; }; type Person = Name & Age; const person: Person = { first: 'Alice', last: 'Smith', age: 30 }; ``` 上面的代码,`Person` 是一个交叉类型,表示一个对象必须拥有 `Name` 和 `Age` 两个类型的属性。 4. 声明函数类型 函数类型可以用来描述函数的输入和输出类型。例如: ```typescript type Add = (a: number, b: number) => number; const add: Add = (a, b) => a + b; ``` 上面的代码,`Add` 是一个函数类型,表示一个函数接受两个 `number` 类型的参数并返回一个 `number` 类型的值。 总之,`type` 关键字可以用来声明多种类型,可以根据需要选择不同的声明用法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值