接口

TS的核心原则之一是对值所具有的结构进行类型检测

接口初探

function printLabel(labelledObj: { label: string }) {
console.log(labelledObj.label);
} let myObj = { size: , label: "Size 10 Object" };
printLabel(myObj);

可选属性

  width?: number

interface SquareConfig {
color?: string
width?: number
} function createSquare(config: SquareConfig): { color: string, area: number } {
let newSquare = { color: 'white', area: }
if (config.color) { newSquare.color = config.color }
if (config.width) { newSquare.area = config.width * config.width }
return newSquare
} let mySquare = createSquare({ color: 'red' }) console.log(mySquare)

只读属性

  readonly x: number

interface Point {
readonly x: number
readonly y: number
} let p1: Point = { x: , y: }
p1.x = // error

  readonly  vs  const

    如果是变量那么使用const , 如果是属性那么使用readonly

额外的属性检测

  [propName: string]: any

interface Square {
color?: string
width?: number
[propName: string]: any
} function createSquare(config: Square): {color: string, area: number} {
let mySquare = {color: 'white', area: }
if (config.color) {
mySquare.color = config.color
}
if (config.width) {
mySquare.area = config.width * config.width
}
return mySquare
} createSquare({colur: 'black', width: })

函数类型

interface SearchFunc {
(source: string, subString: string) : boolean
} let mySearch: SearchFunc
mySearch = function(src: string, str: string) {
let result = src.search(str)
return result > -
}

可索引的类型

interface StringArray {
[index: number]: string
} let myArray: StringArray
myArray = ['Bob', "Fred"] let myStr: string = myArray[]

类类型

interface ClockInterface {
currentTime: Date
} class Clock implements ClockInterface {
currentTime: Date
constructor(h:number, m: number) {}
}

继承接口

interface Shape {
color: string
} interface Square extends Shape {
sideLen: number
} let square = {} as Square
square.color = 'red'
square.sideLen =

混合类型

interface Counter {
(start: number): string
interval: number
reset(): void
} function getCounter(): Counter {
let counter = (function (start: number) { }) as Counter
counter.interval =
counter.reset = function () { }
return counter
} let c = getCounter()
c()
c.reset()
c.interval = 4.9

TS-接口的更多相关文章

  1. Typescript基础(4)——接口

    前言 今天继续typescript的学习,开始ts接口部分的学习. 接口 接口的理解 首先,我们谈论一下现实生活中的接口.比如生活中常用的插座接口,有些插头是三孔插座的,有些是两孔插座的.插座接口规定 ...

  2. 【vue&ts开发】Vue 3.0前的 TypeScript 最佳入门实践

    1.使用官方脚手架构建 新的 VueCLI工具允许开发者 使用 TypeScript 集成环境 创建新项目. 只需运行 vue createmy-app. 然后,命令行会要求选择预设.使用箭头键选择  ...

  3. 用Vue3构建企业级前端应用,TS能让你更轻松点

    摘要:Vue 3已经发布有一段时间了,到底有哪些新特性值得关注,如何用它构建企业级前端项目,怎样快速上手Vue 3?本篇文章将对此进行详细讲解. 前言 工欲善其事,必先利其器 --<论语> ...

  4. Angular2 Service实践——实现简单音乐播放服务

    引言: 如果说组件系统(Component)是ng2应用的躯体,那把服务(Service)认为是流通于组件之间并为其带来生机的血液再合适不过了.组件间通信的其中一种优等选择就是使用服务,在ng1里就有 ...

  5. Angular2 Service实践

    引言: 如果说组件系统(Component)是ng2应用的躯体,那把服务(Service)认为是流通于组件之间并为其带来生机的血液再合适不过了.组件间通信的其中一种优等选择就是使用服务,在ng1里就有 ...

  6. angualr4 路由 总结笔记

    使用cli命令创建根路由模块 ng g cl app.router 或自己建一个路由配置文件 如:app/app.router.ts // app/app.router.ts // 将文件修改为 im ...

  7. vscode 搭建react-native

    vscode 搭建react-native 选择:vscode + typings + eslint * vscode: 宇宙最强IDE家族的最新产品 * typings: 基于typescirpt的 ...

  8. typscript 语法1

    let isDone: boolean = false; let decLiteral: number = 0xf00d; let names: string = 'boob'; /** 使用模版字符 ...

  9. 重读《学习JavaScript数据结构与算法-第三版》-第2章 ECMAScript与TypeScript概述

    定场诗 八月中秋白露,路上行人凄凉: 小桥流水桂花香,日夜千思万想. 心中不得宁静,清早览罢文章, 十年寒苦在书房,方显才高志广. 前言 洛伊安妮·格罗纳女士所著的<学习JavaScript数据 ...

  10. 【Vuejs】301- Vue 3.0前的 TypeScript 最佳入门实践

    前言 我个人对更严格类型限制没有积极的看法,毕竟各类转类型的骚写法写习惯了. 然鹅最近的一个项目中,是 TypeScript+ Vue,毛计喇,学之...-真香! 1. 使用官方脚手架构建 npm i ...

随机推荐

  1. idea设置忽略svn的文件或目录

    1. 这个地方可以设置忽略的文件和目录,但是这里设置之后,我们在工程里面就看不到了 2. 这里设置提交是后要忽略的文件,比如我忽略的target目录,*.iml 我再1中设置了target目录发现我的 ...

  2. 通信有连接有消息队列选择boost.asio

    通信有连接有消息队列选择boost.asio 连接自主管理 消息队列自主管理

  3. js 循环json

    var json= { "Type": "Coding", "Height":100 }; for (var key in json) { ...

  4. Linux新建环境变量快速切换到文件夹(export)

    如果有一个文件夹目录很深/home/user/aaa/bbb/ccc/ddd/eee/fff/ggg,但是经常要跳转到这个文件夹.一个简单的办法就是给这个文件夹建立一个类似$PATH那样的环境变量,如 ...

  5. C#接口的作用实例解析

    一.接口的作用: 我们定义一个接口: public interface IBark { void Bark(); } 1.  再定义一个类,继承于IBark,并且必需实现其中的Bark()方法 pub ...

  6. sql update语句

    如果要更新数据库表中的记录,我们就必须使用UPDATE语句. UPDATE语句的基本语法是: UPDATE <表名> SET 字段1=值1, 字段2=值2, ... WHERE ...; ...

  7. Github上发布托管和下载

    打包托管 远程下载安装 git clone https://github/2008nmj/mnist_python 使用git工具和命令行 Git使用场景 (可以不用上传到托管平台) 写论文 分工合作 ...

  8. NX二次开发-BlockUI的Tree树控件

    关于BlockUI的Tree树控件只要研究UGOPEN里西门子官方的那个例子在结合去查NXOPEN的帮助基本就可以了.[不过我是看唐工的视频学会的,没办法自己领悟性不太强] //=========== ...

  9. 剑指offer——数组中出现次数超过一半的数字(c++)

    题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2.如 ...

  10. 获取客户端IP地址-----以及--------线上开启redis扩展

    /** * 获取客户端IP地址 * @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字 * @return mixed */ function get_cl ...