接口的创建

可以使用 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. js 获取时间对象

    1.当前系统时间   var date=new Date(); 2.字符串转时间对象  var date=new Date("2018-01-01"); 3.获取年份: var y ...

  2. C++编程学习(二) 数据

    博主已经有一些基础了,所以写的东西可能是容易错的,或者以前没记住的,或者是对理解知识点有帮助的.因此如果有纯小白看到了这篇博文,不懂的地方请自行百度啦~ 另外,本系列所有内容的图片均来自于西北工业大学 ...

  3. Loadrunner安装与破解

    一.安装loadrunner 1. 点击setup.exe 2. 点击安装完整程序 3. 点击确定,安装必需程序 4. 安装vc2005的时候报了如下错,导致无法继续安装,没有报错可跳过第五步 5. ...

  4. Android进阶——多线程系列之wait、notify、sleep、join、yield、synchronized关键字、ReentrantLock锁

    多线程一直是初学者最困惑的地方,每次看到一篇文章,觉得很有难度,就马上叉掉,不看了,我以前也是这样过来的.后来,我发现这样的态度不行,知难而退,永远进步不了.于是,我狠下心来看完别人的博客,尽管很难但 ...

  5. (递归)Hanoi Tower

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

  6. python刷LeetCode:27. 移除元素

    难度等级:简单 题目描述: 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O ...

  7. 1.6判断类型toString.call()

    之前我都是使用typeof,后来发现它的判断有局限,例如(){}obeject.p.toString.call()解决了 obj.toString()的结果和Object.prototype.toSt ...

  8. PHP+InfiniteScroll实现网页无限滚动加载数据实例

    PHP+InfiniteScroll实现网页无限滚动加载数据实例,实现原理:当滚动条到底离网页底部一定长度的时候,向后台发送页数并获取数据. 首先我们在页面上先放置10条数据,即第一页,每一项都是p标 ...

  9. .NET技术-4.0. NETCORE跨域

    .NET技术-4.0. NETCORE跨域 1.安装程序CORS程序包,一般默认都带了此程序包的 Install-Package Microsoft.AspNetCore.Mvc.Cors 2.配置C ...

  10. 翻译——3_Gaussian Process Regression

    使用不同的机器学习方法进行预测 续上篇2_Linear Regression and Support Vector Regression 高斯过程回归 %matplotlib inline impor ...