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定义接口, 并且定义接口中成员的类型 编译之后会发 ...
随机推荐
- [gym102978D]Do Use FFT
前置知识 (以下内容并不严谨,可以参考论文<转置原理的简单介绍>) 对于一个算法,其为线性算法当且仅当仅包含以下操作: 1.$read\ i$,将$r_{i}$的值赋为(下一个)读入的元素 ...
- [cf1349E]Slime and Hats
首先,当发现全场不存在黑色帽子时,显然所有人都知道其是白色帽子,即必然离开 当第一轮时,若第$n$个人发现前面$n-1$个人全是白色时,其自己必然是黑色,必然离开 而第二轮时,若第$n-1$个人发现$ ...
- idea反编译失败 /* compiled code */的解决方法
最近在研究源码,但是我的idea有点奇怪,有的文件可以反编译,但有的文件反编译后方法内容是 /* compiled code */,查了下说是反编译失败了,都说是插件的原因. 然后我看了下idea的插 ...
- Elasticsearch分布式搜索和数据分析引擎-ElasticStack(上)v7.14.0
Elasticsearch概述 **本人博客网站 **IT小神 www.itxiaoshen.com Elasticsearch官网地址 https://www.elastic.co/cn/elast ...
- jQuery源码中的赌博网站
前言 jQuery源码中有赌博网站? 起因是公司发的一份自查文件,某银行在日常安全运营过程中发现在部分jQuery源码中存在赌博和黄色网站链接. 链接分为好几个: www.cactussoft.cn ...
- R语言与医学统计图形-【10】ggplot2图形映射
ggplot2绘图系统--图形映射 颜色的映射. #aes中映射变量 ggplot()+geom_point(aes(x=carat,y=price,color='blue'),#color视为单一变 ...
- python项目——新闻管理系统
DAO(Data Access Object) 数据访问对象是一个面向对象的数据库接口 控制台的输入输出都是再app.py里面完成的 mysql_db.py import mysql.connect ...
- LVS-原理
一. 集群的概念 服务器集群简称集群是一种服务器系统,它通过一组松散集成的服务器软件和/或硬件连接起来高度紧密地协作完成计算工作.在某种意义上,他们可以被看作是一台服务器.集群系统中的单个服务器通常称 ...
- EXCEL-如何在excel中对图片进行批量排版
新建EXCEL->导入图片->如果每张图高度为33个单元格,共计10张图,那么将最后边的那张图(即正对着你的那一张)剪切粘贴到33*9行第一个单元格处->按F5定位"对象& ...
- nginx 的一个conf配置
server { listen 80 default_server; server_name www.caipudq.cn caipudq.cn *.caipudq.cn; root /mnt/www ...