接口的创建

可以使用 type 和 interface 来创建类型

type 特有的优点:

  1. 声明基本类型别名,联合类型,元组等类型
    type S = string;

    type IFoo = IBar | string;
  1. 可使用 typeof 获取实例的类型赋值
    const a:number = 1;
const IA = typeof a;
// IA 被 ts 识别为 number

interface 特有的优点

interface 能够声明合并

interface IFoo {
name:string
}
interface IFoo {
age:number
}
// 等于
type IFoo = {
name:string
age:number
}

关于对象

获取对象

以IFoo作为例子

interface IFoo {
name:string
age:number
gender:string
}

获取接口的单个属性的类型

type IBar = IFoo["name"]
// IBar = string

获取接口中一或多个属性,并将其合并为一个接口

type IBar = Pick<IFoo, "name">
// IBar = {name: string}
type IBar = Pick<IFoo, "name" | "age">
// IBar = {name: string, age: number}

忽略接口中的某些属性,将剩余属性作为一个接口

type IBar = Omit<IFoo, "name">
// IBar = {age: number, gender: string}

获取接口中所有键

type IBar = keyof IFoo
// IBar = "name" | "age" | "gender"

获取接口中所有键对应的值

type IBar = IFoo[keyof IFoo]
// IBar = string | number

创建对象

创建多个重复值的对象

type IBar = Record<"name" | "age", string>
// IBar = {name: string, age: string}

使用例子

interface IFoo {
name: string
age: string
gender: string getSkill(): void setSkill: (skill: string[]) => void
}
// 生成一个新类型,将 age 和 gender 的类型修改为 number,其他的类型不变
// 使用上述知识 声明一个新的高级类型IBar:
type IBar<K extends string,T = number> = (Record<K, T> & Omit<IFoo, K>) type IBaz = IBar<"age" | "gender">
// 生成新的类型 IBaz ,符合上述描述
// 并且使用 Ibar 可将 age 和 gender (或其他)更改为任意其他类型 如:
type IBax = IBar<"age" | "gender" | "name", string[]>

关于函数

函数类型创建

创建函数类型的两种方式

interface IFoo {
name: string
age: number
gender: string getSkill(): void // type 不支持此种声明 setSkill: (skill: string[]) => void
}

函数类型中参数的获取

以此为例子:

type IFoo = (name: string, age: number) => { name: string, age: number, gender: string }

获取函数的参数类型:

type IBar = Parameters<IFoo>  

// IBar = [string, number]

获取函数的返回类型:

type IBar = ReturnType<IFoo>  

// IBar = {name: string, age: number, gender: string}

typescript 使用的几种情况的更多相关文章

  1. Tomcat内存溢出的三种情况及解决办法分析

    Tomcat内存溢出的原因 在生产环境中tomcat内存设置不好很容易出现内存溢出.造成内存溢出是不一样的,当然处理方式也不一样. 这里根据平时遇到的情况和相关资料进行一个总结.常见的一般会有下面三种 ...

  2. Objective C中数组排序几种情况的总结

    总结OC中数组排序3种方法:sortedArrayUsingSelector:;sortedArrayUsingComparator:;sortedArrayUsingDescriptors: 数组排 ...

  3. js内存泄露的几种情况

    想解决内存泄露问题,必须知道什么是内存泄露,什么情况下出现内存泄露,才能在遇到问题时,逐个排除.这里只讨论那些不经意间的内存泄露. 一.什么是内存泄露 内存泄露是指一块被分配的内存既不能使用,又不能回 ...

  4. html/css基础篇——DOM中关于脱离文档流的几种情况分析

    所谓的文档流,指的是元素排版布局过程中,元素会自动从左往右,从上往下的流式排列.并最终窗体自上而下分成一行行, 并在每行中按从左至右的顺序排放元素.脱离文档流即是元素打乱了这个排列,或是从排版中拿走. ...

  5. LoadRunner 场景运行error的几种情况

    一. Error -27727: Step download timeout (120 seconds)has expired when downloading resource(s). Set th ...

  6. JS生成某个范围的随机数(四种情况)

    前言: JS没有现成的函数,能够直接生成指定范围的随机数. 但是它有个函数:Math.random()  这个函数可以生成 [0,1) 的一个随机数. 利用它,我们就可以生成指定范围内的随机数. 而涉 ...

  7. SET Transaction Isolation Level Read语法的四种情况

    转自:http://www.cnblogs.com/qanholas/archive/2012/01/04/2312152.html 存储过程:SET Transaction Isolation Le ...

  8. php出现“syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM”错误的一种情况,及解决方法

    PHP中的“syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM”错误,可能是因为美元符号$的误用,看下面一种情况 class Test{         s ...

  9. 探讨read的返回值的三种情况

    http://blog.chinaunix.net/uid-23629988-id-3035613.html 今天探讨一个很看似简单的API “read”的返回值问题.read的返回值有哪几个值?每个 ...

随机推荐

  1. UVA - 11277 Cyclic Polygons(二分)

    题意:已知圆的内接多边形的各个边长,求多边形的面积. 分析: 1.因为是圆的内接多边形,将多边形的每个顶点与圆心相连,多边形的面积就等于被分隔成的各三角形之和. 2.根据海伦公式,任意一个三角形的面积 ...

  2. 51nod 算法马拉松3 A:序列分解

    序列分解 System Message (命题人) 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 小刀和大刀是双胞胎兄弟.今天他们玩一个有意思的游戏. 大刀给小刀准备了一个长度为n ...

  3. 大数据高可用集群环境安装与配置(09)——安装Spark高可用集群

    1. 获取spark下载链接 登录官网:http://spark.apache.org/downloads.html 选择要下载的版本 2. 执行命令下载并安装 cd /usr/local/src/ ...

  4. idea导入新项目后右键main方法没有Run xxx.main()

    刚安装的idea2019.1,基本上没有什么配置.导入从github clone下来的工程.鼠标右键main方法时没有发现 run 选项,如下图所示: 这里是配置有问题造成的,对比下正常的工程,可以发 ...

  5. 剑指offer_1.18_Day_2

    怠惰怠惰,好好练练了要 二维数组中查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个 ...

  6. mysql 中两个日期相减获得 天 小时 分钟 或者 小时:分钟的格式

    /**有一个需求,要求获得两个日期想减的天数,小时数,分钟数.通过查找资料,于是乎我写出了如下代码,来获得两个字段.*/ IFNULL(CONCAT( ,'-',''), ),),'天')), ),) ...

  7. (递归)Hanoi Tower

    #include<stdio.h>void move(int n,char a,char b){ printf("将第%d个盘子从%c移动到%c\n",n,a,b);  ...

  8. Redis: Reducing Memory Usage

    High Level Tips for Redis Most of Stream-Framework's users start out with Redis and eventually move ...

  9. 201771010123汪慧和《面向对象程序设计Java》第十二周实验总结

    一.理论部分 1.在Java提供的GUI构建工具中可以分为组件和容器两类. 2.在Java中的组件有:按钮.标签.复选框.单选按钮.选择框.列表框.文本框.滚动条.画布.菜单. 3.在Java中的容器 ...

  10. Vue组件template模板字符串几种写法

    在定义Vue组件时,组件的模板template选项需要的是一个字符串,当其内容较复杂需要换行时,需要简单处理一下,具体有五种方式: 方式一:使用 \ 转义换行符 <!DOCTYPE html&g ...