大致介绍

在TypeScript里,接口的作用就是为这些类型命名和为你的代码或第三方代码定义契约。
接口
例子:
function printLabel(labelledObj: { label: string }) {
console.log(labelledObj.label);
}
let myObj = { size: 10, label: "Size 10 Object" };
printLabel(myObj);
printLabel函数有一个参数,要求这个参数是个对象,并且有一个属性名为label的类型为string的属性
有时我们会传入多个参数,但是只检测指定的参数有没有
用接口来实现上面的例子:
interface LabelledValue {
label: string;
}
function printLabel(labelledObj: LabelledValue) {
console.log(labelledObj.label);
}
let myObj = {size: 10, label: "Size 10 Object"};
printLabel(myObj);
注意:要用到关键字 interface
可选属性
有时接口里的属性不是必须的是可选的,那么只要加个?就可以了
interface SquareConfig {
color?: string;
width?: number;
}
function createSquare(config: SquareConfig): {color: string; area: number} {
let newSquare = {color: "white", area: 100};
if (config.color) {
newSquare.color = config.color;
}
if (config.width) {
newSquare.area = config.width * config.width;
}
return newSquare;
}
let mySquare = createSquare({color: "black"});
上面的代码中 config:SquareConfig规定了函数参数, {color: string;area: numner}规定了函数返回值的类型
使用可选属性的好处:
1、可以对可能存在的属性进行定义
2、可以捕获访问不存在的属性时的错误
只读属性
如果向让一个值只读,不可以修改就可以使用readonly
interface Point {
readonly x: number;
readonly y: number;
}
let p1: Point = { x: 10, y: 20 };
p1.x = 5; // error!
TypeScript具有ReadonlyArray<number>类型,它与Array<T>相似,只是把怕有可变方法去掉了,因此可以确保数组创建后再也不能被修改:
let a: number[] = [1, 2, 3, 4]; let ro: ReadonlyArray<number> = a; ro[0] = 12; // error! ro.push(5); // error! ro.length = 100; // error! a = ro; // error!
额外的属性检查
看一个例子:
interface SquareConfig {
color?: string;
width?: number;
}
function createSquare(config: SquareConfig): { color: string; area: number } {
// ...
}
let mySquare = createSquare({ colour: "red", width: 100 });
起初会认为这个是对的,接口定义了两个可选属性color和width。函数实际传入了width属性和一个接口没有定义的colour属性,但是这段代码会报错。
对象字面量会被特殊对待而且会经过额外属性检查,当将它们赋值给变量或作为参数传递的时候。 如果一个对象字面量存在任何“目标类型”不包含的属性时,你会得到一个错误。
最好的解决办法就是添加一个字符串索引签名
interface SquareConfig {
color?: string;
width?: number;
[propName: string]: any;
}
函数类型
例子:
interface SearchFunc {
(source: string, subString: string): boolean;
}
let mySearch: SearchFunc;
mySearch = function(src, sub) {
let result = src.search(sub);
if (result == -1) {
return false;
}
else {
return true;
}
}
可索引的类型
可索引类型比如a[10]或obj['a']。 可索引类型具有一个索引签名,它描述了对象索引的类型,还有相应的索引返回值类型。
interface StringArray {
[index: number]: string;
}
let myArray: StringArray;
myArray = ["Bob", "Fred"];
let myStr: string = myArray[0];
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# typescript
# 接口
# TypeScript 接口继承的具体使用
# TypeScript中的接口和泛型你了解吗
# typeScript 核心基础之接口interface
# typeScript 泛型使用和泛型接口结合
# TypeScript接口介绍
# 基于Typescript与Axios的接口请求管理详解
# TypeScript定义接口(interface)案例教程
# TypeScript 中接口详解
# TypeScript接口使用介绍
# 可选
# 就可以
# 有一个
# 返回值
# 的是
# 是个
# 最好的
# 多个
# 你会
# 规定了
# 不可以
# 这段
# 要用
# 不存在
# 掉了
# 报错
# 第三方
# 来实现
# 以对
# 解决办法
相关文章:
建站之星后台密码遗忘如何找回?
建站之星CMS五站合一模板配置与SEO优化指南
如何设计高效校园网站?
建站ABC备案流程中有哪些关键注意事项?
如何用PHP快速搭建CMS系统?
高端云建站费用究竟需要多少预算?
建站之星安装需要哪些步骤及注意事项?
新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?
兔展官网 在线制作,怎样制作微信请帖?
c++ stringstream用法详解_c++字符串与数字转换利器
Python如何创建带属性的XML节点
公司门户网站制作流程,华为官网怎么做?
保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?
建站之星24小时客服电话如何获取?
用v-html解决Vue.js渲染中html标签不被解析的问题
,有什么在线背英语单词效率比较高的网站?
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
如何选择服务器才能高效搭建专属网站?
教学网站制作软件,学习*后期制作的网站有哪些?
如何快速重置建站主机并恢复默认配置?
制作网站的公司有哪些,做一个公司网站要多少钱?
如何快速生成专业多端适配建站电话?
电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?
宁波免费建站如何选择可靠模板与平台?
香港服务器如何优化才能显著提升网站加载速度?
建站之星云端配置指南:模板选择与SEO优化一键生成
如何自定义建站之星网站的导航菜单样式?
北京网站制作公司哪家好一点,北京租房网站有哪些?
c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】
建站主机助手选型指南:2025年热门推荐与高效部署技巧
制作农业网站的软件,比较好的农业网站推荐一下?
如何在Golang中使用encoding/gob序列化对象_存储和传输数据
建站三合一如何选?哪家性价比更高?
营销式网站制作方案,销售哪个网站招聘效果最好?
如何选购建站域名与空间?自助平台全解析
长沙做网站要多少钱,长沙国安网络怎么样?
孙琪峥织梦建站教程如何优化数据库安全?
建站VPS配置与SEO优化指南:关键词排名提升策略
常州企业建站如何选择最佳模板?
建站上传速度慢?如何优化加速网站加载效率?
ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?
建站VPS选购需注意哪些关键参数?
,柠檬视频怎样兑换vip?
如何快速登录WAP自助建站平台?
b2c电商网站制作流程,b2c水平综合的电商平台?
如何通过WDCP绑定主域名及创建子域名站点?
建站主机默认首页配置指南:核心功能与访问路径优化
建站主机无法访问?如何排查域名与服务器问题
教程网站设计制作软件,怎么创建自己的一个网站?
,购物网站怎么盈利呢?
*请认真填写需求信息,我们会在24小时内与您取得联系。