typescript接口---interface
假如我现在需要批量生产一批对象,这些对象有相同的属性,并且对应属性值的数据类型一致.该怎么去做?
在ts中,因为要检验数据类型,所以必须对每个变量进行规范,自然也提供了一种批量规范的功能.这个功能就是接口.
比如下图就是接口的使用:

结合上图我们对接口进行简单的分析.
一、基本使用.
编写接口
interface+接口名 {
属性名:数据类型;
属性名:数据类型;
}
使用接口
var/let/const 变量名:接口名={
属性名:属性值
}
注意:
1.接口编写完就相当于一种自定义的数据类型,它限制了特定属性名的值的数据类型.
2.在对象接入接口的时候直接':接口名'使用.但是,对象的属性值必须符合数据类型,不然报错.
3.数据类型可以是一个有返回值的函数,调用接口的时候,也必须是有返回值的函数
interface test{
aname:string;
age:number;
sex:()=>string
}
const myTest:test={
aname:'1',
age:1,
sex:()=>'a'
}
二、特殊属性接口
基本使用里面我们说了确定属性,即属性名和属性值直接写明了.接下来说一下特殊属性.
1.可选属性.(调用可少)
接口中写了这个属性,但我调用的时候不一定用.
interface test{
aname:string;
age:number;
sex?:string;
}
const i:test={
aname:'shyno',
age:18,
}
const you:test={
aname:'秀吉',
age:18,
sex:'秀吉'
}
2.任意属性(调用可多)
在你这个接口规定的几个属性基础下面,我可能还会多几个属性
interface test{
aname:string;
age:number;
sex?:string;
[propName: string]:any;
}
const i:test={
aname:'shyno',
age:18,
test:1,
test1:'1'
}
const you:test={
aname:'秀吉',
age:18,
sex:'秀吉',
test:undefined
}
其中接口中
[propName: string]:any;
string是规定的属性数据类型,设置成number之后属性名是可以用数值的.并且只能是string和number.

然后,如果我们修改了接口任意属性的数据类型,连接口的确定数据类型都会报错,鼠标移入就会发现它的报错和test一样.

反复试验发现,任意属性的数据类型同时限制了接口的可选属性和确定属性.也就是说可选属性和确认属性的的数据类型必须是任意属性的子属性.所以任意属性的数据类型设置的时候要考虑清楚
3.只读属性.
ts对数据类型的限制只是限制非同类型的数据操作,并不是不让其操作.但是只读属性就可以限制程序员对其进行操作
interface test{
readonly id:number,
aname:string;
age:number;
sex?:string;
[propName: string]:any;
}
const i:test={
id:2,
aname:'shyno',
age:18,
test:1,
test1:'1'
}

注意:只读属性也可以是可选属性
interface test{
readonly id?:number,
aname:string;
age:number;
sex?:string;
[propName: string]:any;
}
const i:test={
aname:'shyno',
age:18,
test:1,
test1:'1'
}
三、函数接口
除了限制对象,接口还可以限制函数
interface test{
(param1:string,param2:number):any
}
let myTest:test=function(param1,param2){
return (param1+param2)
}
比如这样就可以限制参数数据类型和返回值数据类型
四、联合类型接口
假如某个元素有多重数据类型可能,这时候就得用联合类型
interface test{
aname:string;
age:number;
sex:string[] | string | (()=>string);
}
const myTest:test={
aname:'1',
age:1+1,
sex:()=>'a'
}
const myTest1:test={
aname:'1',
age:1+1,
sex:'a'
}
const myTest2:test={
aname:'1',
age:1+1,
sex:['a','b']
}
五、接口继承
假如我现在已经有一到两个接口了,我接下来想把这两个接口整合或者说合并到第三个接口的时候,就可以用继承.多接口继承的时候,多个接口之间用逗号隔开
interface test{
age:number;
}
interface test1{
aname:string;
}
interface test2 extends test,test1 {
sex:string[] | string | (()=>string);
}
const myTest2:test2={
aname:'1',
age:1+1,
sex:['a','b']
}
以上,差不多就是接口的所有用法了.接口还是主要服务于ts的数据类型规范的,灵活使用就行.
typescript接口---interface的更多相关文章
- typescript 接口 interface
代码: // 接口:行为的抽象 // 一.对class类的约束 // 接口定义 // 打印机 interface Iprinter { Printing(msg:string):string; } i ...
- TypeScript学习指南第二章--接口(Interface)
接口(Interface) TypeScript的核心机制之一在于它的类型检查系统(type-checker)只关注一个变量的"模型(shape)" 稍后我们去了解这个所谓的形状是 ...
- Typescript 接口(interface)
概述 typescript 的接口只会关注值的外形,实际就是类型(条件)的检查,只要满足就是被允许的. 接口描述了类的公共部分. 接口 interface Person { firstName: st ...
- 从C#到TypeScript - 接口
总目录 从C#到TypeScript - 类型 从C#到TypeScript - 高级类型 从C#到TypeScript - 变量 从C#到TypeScript - 接口 从C#到TypeScript ...
- typescript接口的概念 以及属性类型接口
/* 1.vscode配置自动编译 1.第一步 tsc --inti 生成tsconfig.json 改 "outDir": "./js", 2.第二步 任务 ...
- 【区分】Typescript 中 interface 和 type
在接触 ts 相关代码的过程中,总能看到 interface 和 type 的身影.只记得,曾经遇到 type 时不懂查阅过,记得他们很像,相同的功能用哪一个都可以实现.但最近总看到他们,就想深入的了 ...
- 《三》大话 Typescript 接口
> 前言: 本文章为 TypeScript 系列文章. 旨在利用碎片时间快速入门 Typescript. 或重新温故 Typescript 查漏补缺.在官方 api 的基础上, 加上一些日常使用 ...
- typescript接口扩展
/* typeScript中的接口 接口扩展 */ /* 接口的作用:在面向对象的编程中,接口是一种规范的定义,它定义了行为和动作的规范,在程序设计里面,接口起到一种限制和规范的作用.接口定义了某一批 ...
- TypeScript接口与类的使用
一.TypeScript接口 Interfaces 可以约定一个对象的结构 一个对象去实现一个接口 就必须拥有这个接口中所有的成员用interface定义接口, 并且定义接口中成员的类型 编译之后会发 ...
随机推荐
- Python 随机数,数学
数学相关的库 import math 向上取整: print(math.ceil(18.9)) 向下取整: pri ...
- [atARC068F]Solitaire
对于最终的序列$a_{i}$,条件如下: 1.$a_{i}$是一个排列,且$a_{k}=1$ 2.不存在三元组$1\le x<y<z<k$,使得$a_{x}<a_{y}< ...
- [loj539]旅游路线
考虑枚举加油的位置,当确定某次在第$i$个位置加油后,且下一次到$j$加油,那么$i$到$j$必然会选择不超过$c_{i}$条边且最长的路径,记作$d_{i,j}$ 如果能求出$d_{i,j}$,再设 ...
- System.Web.Optimization
项目中引用了 System.Web.Optimization 这个程序集,缺少程序集会报错: 命名空间"System.Web"中不存在类型或命名空间名"Optimizat ...
- 『学了就忘』Linux文件系统管理 — 57、Linux文件系统介绍
目录 1.了解硬盘结构(了解即可) (1)硬盘的逻辑结构 (2)硬盘接口 2.Linux文件系统介绍 (1)Linux文件系统的特性 (2)Linux常见文件系统 3.整理一下对文件系统的认识 在了解 ...
- CF30E. Tricky and Clever Password
被你谷翻译诈骗了兄弟. 不过下次可以拿去诈骗其他人. 考虑枚举B,显然结论有B作为回文串越长越好,这个可以使用manacher,或者直接二分hash. 然后考虑翻转末尾串,然后记录其匹配到第 \(i\ ...
- 洛谷 P2481 [SDOI2010]代码拍卖会(背包+隔板法)
题面传送门 题意: 给出 \(n,p\),求有多少 \(n\) 位数 \(X=a_1a_2a_3\dots a_n\) 满足: 该 \(n\) 位数不含前导零 \(a_i \leq a_{i+1}\) ...
- 【豆科基因组】绿豆Mungbean, Vigna radiata苏绿基因组预印
目录 一.来源 二.结果 测序组装 组装评价 编码基因预测 基因功能注释 非编码RNA注释 假基因预测 重复序列注释 进化分析和分歧时间估计 全基因组复制 LTR插入时间估计 正选择基因 一.来源 H ...
- 34. Swap Nodes in Pairs
Swap Nodes in Pairs My Submissions QuestionEditorial Solution Total Accepted: 95230 Total Submission ...
- MapReduce07 Join多种应用
目录 1 Join多种应用 1.1 Reduce Join 1.2 Reduce Join实例实操 需求 需求分析 Map数据处理 Reduce端合并(数据倾斜) 代码实现 JoinBean类 Joi ...