TypeScript基础入门 - 接口 - 可索引的类型

转载地址

TypeScript基础入门 - 接口 - 可索引的类型

项目实践仓库

https://github.com/durban89/typescript_demo.git
tag: 1.0.11

为了保证后面的学习演示需要安装下ts-node,这样后面的每个操作都能直接运行看到输出的结果。

npm install -D ts-node

后面自己在练习的时候可以这样使用

npx ts-node src/learn_basic_types.ts
npx ts-node 脚本路径

接口

TypeScript的核心原则之一是对值所具有的结构进行类型检查。 它有时被称做“鸭式辨型法”或“结构性子类型化”。 在TypeScript里,接口的作用就是为这些类型命名和为你的代码或第三方代码定义契约。

可索引的类型

与使用接口描述函数类型差不多,我们也可以描述那些能够“通过索引得到”的类型,比如a[10]或ageMap["daniel"]。 可索引类型具有一个 索引签名,它描述了对象索引的类型,还有相应的索引返回值类型。 让我们看一个例子:

interface SomeArray {[index: number]: string;
}let someArray: SomeArray;
someArray = ["string1", "string2"];let str: string = someArray[0];
console.log(str);

运行后结果如下

string1

上面例子里,我们定义了SomeArray接口,它具有索引签名。 这个索引签名表示了当用 number去索引SomeArray时会得到string类型的返回值。共有支持两种索引签名:字符串和数字。 可以同时使用两种类型的索引,但是数字索引的返回值必须是字符串索引返回值类型的子类型。 这是因为当使用 number来索引时,JavaScript会将它转换成string然后再去索引对象。 也就是说用 100(一个number)去索引等同于使用"100"(一个string)去索引,因此两者需要保持一致。

class Person {name: string;
}
class Student extends Person {className: string;
}// 错误:使用数值型的字符串索引,有时会得到完全不同的Person!
interface NotOkay {// [x: number]: Person; // 数字索引类型“Person”不能赋给字符串索引类型“Student”[x: string]: Student;
}


字符串索引签名能够很好的描述dictionary模式,并且它们也会确保所有属性与其返回值类型相匹配。 因为字符串索引声明了 obj.property和obj["property"]两种形式都可以。 下面的例子里, name的类型与字符串索引类型不匹配,所以类型检查器给出一个错误提示:

interface SomeInterface {[index: string]: string// length: number    // 错误,`length`的类型与索引类型返回值的类型不匹配name: string       // 可以,name是string类型
}

最后,你可以将索引签名设置为只读,这样就防止了给索引赋值:

interface SomeInterface {[index: string]: string// length: number    // 错误,`length`的类型与索引类型返回值的类型不匹配name: string       // 可以,name是string类型
}interface ReadonlySomeArray {readonly [index: number]: string;
}
let readonlyArray: ReadonlySomeArray = ["string1", "string2"];
readonlyArray[2] = "string3"; // error!

运行后会得到如下错误提示

src/interface_6.ts(36,1): error TS2542: Index signature in type 'ReadonlySomeArray' only permits reading.

你不能设置readonlyArray[2],因为索引签名是只读的。

本实例结束实践项目地址

https://github.com/durban89/typescript_demo.git
tag: 1.0.12

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/277525.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jquery中的ajax方法(备忘)

参考:https://www.cnblogs.com/tylerdonet/p/3520862.html w3school:http://www.w3school.com.cn/jquery/ajax_ajax.asp 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址。 2.type: 要求为String类型的参数&…

java高级类_Java高级类特性(一)

权限类内同包不同包子类不同包非子类private√default√√protected√√√public√√√√四、super关键字的使用package com.test.java;/** super可以用来修饰属性、方法、构造器* 1)当子类与父类中有同名的属性时,可以通过"super.属性"显式的调用父类中声…

Android.对话框(AlertDialog/Toast/Snackbar)

1、资料: 1.1、Android提醒微技巧,你真的了解Dialog、Toast和Snackbar吗? - CSDN博客.html(https://blog.csdn.net/guolin_blog/article/details/51336415) 1.2、Android界面设计之对话框——定制Toast、AlertDialog -…

第4次作业

转载于:https://www.cnblogs.com/wzh2920330283/p/11027254.html

基于Docker搭建Percona XtraDB Cluster数据库集群

本文实验的环境参数 阿里云ECS Centos7.5Docker version 18.06.0-cepercona/percona-xtradb-cluster:5.7Percona XtraDB Cluster的镜像下载地址:https://hub.docker.com/r/percona/percona-xtradb-cluster/ 怎么使用Docke和下载镜像,请查看Docker的官方文…

java publickey_数字证书中读取PublicKey

1. 读取https签发证书中的key1) 在下面的代码中,是实现读取证书字符串来读取key的,CERTIFICATE 就是一个证书的字符串, 而方法cf.generateCertificate() 接受的是一个InputStream 流,当然这个地方也可以读取一个文件 new FileInputSream("file path")即可!public Str…

UIViewController 小结

1 生命周期 init方法中view仍然是nil,此时,如果写了self.view,直接调用loadView。看名字也知道,loadView在viewDidLoad之前。initWithNibName:bundle:,designated初始化方法2 代码组织 init,只有需要传一些…

多核学习方法介绍

通过上篇文章的学习,我们知道,相比于单个核函数,多核模型可以具有更高的灵活性。经过多个核函数映射后的高维空间是由多个特征空间组合而成的组合空间,而显然组合空间可以组合各个子空间不同的特征映射能力,能够将异构…

java注解类型_Java注解类型

本篇文章帮大家学习java注解类型,包含了Java注解类型使用方法、操作技巧、实例演示和注意事项,有一定的学习价值,大家可以用来参考。标记注解类型标记注解类型是没有元素的注解类型,甚至没有默认值。标记注解由注解处理工具使用。…

linux go环境安装和基本项目结构

最近项目中要用到Go语言,所以简单总结一下安装和配置,Go这个语言本身就限定了很多规范,比如项目设置,编程风格等,开发中就不需要再因为各种规范问题纠结了,直接用官方规定的能避免很多坑,下面直…

运输层

运输层-TCP 简介 通俗点来说,运输层是连接底层和用户层的,运输层向它上面的应用层提供通信服务,它属于通信部分的最高层,同时也是用户功能的最低层。 运输层重要功能是复用和分用。复用:发送方不同应用进程可以使用同一…

对AI"出错"零容忍?美国加强AI推理解释能力研究

随着硅谷私企引领人工智能(AI)爆发式发展,美国国防部曾发布报告称,将“立即采取行动”加速AI和自动化技术研发。据《麻省理工技术评论》杂志网站近日报道,美国国防高级研究计划局(DARPA)已经着手…

java调用指定浏览器_Java调用浏览器打开网页完整实例

本文实例讲述了java调用浏览器打开网页的方法。分享给大家供大家参考。具体实现方法如下:package com.yifang.demo;import java.io.file;public class openpagedemo {public static void main(string[] args) {try {//string url "http://www.baidu.com"…

[HDU517] 小奇的集合

题目链接 显然有贪心每次选择最大的两个数来做。 于是暴力地把最大的两个数调整到非负(暴力次数不超过1e5),接下来使用矩阵乘法即可。 \[ \begin{pmatrix} B\\S\\T \end{pmatrix} \begin{pmatrix} 1&1&0\\ 1&0&0\\ 1&1&…

phpStudy

很多朋友在学习php的过程中会看到phpstudy这个东西,那么phpstudy是做什么的呢?有什么用?接下来的这篇文章将个大家来详细的介绍一下phpstudy的内容。 首先在百度百科上对于phpstudy的定义是一个PHP调试环境的程序集成包。 该程序包集成最新的…

杀入共享汽车市场的PonyCar,是下一个牺牲者还是引领者?

曾几何时,汽车是财富、地位的象征,拥有一辆汽车就感觉自己处处高别人一等。但如今,汽车已然成为一件随处可见的商品,甚至已经到车来车往、熙熙攘攘的地步。根据中商产业研究院发布的《2018-2023年中国汽车行业市场前景及投资机会研…

python图片内容长度识别_Python实现识别图片内容的方法分析

本文实例讲述了Python实现识别图片内容的方法。分享给大家供大家参考,具体如下:python识别图片内容。这里我的环境为windows64位,python2.7.14需要用到PIL模块和tesseract模块。首先需要安装pip包管理,安装方法可参考附录windows下…

AJAX工具

代码如下 var AppAjax {baseUrl:AppConfig.apiUrl//【POST请求】,post:function(pUrl,pData,pSuccessFun){pUrl AppAjax.baseUrl pUrl;$.ajax({headers: {token: AppConfig.token},url:pUrl,type:POST,data:JSON.stringify(pData),//pData,//JSON.stringify(),contentType:&q…

厉害了!Intel第九代酷睿参数曝光

2019独角兽企业重金招聘Python工程师标准>>> 导读上周有消息称,Intel第九代酷睿处理器最快于8月1日发布,共有三款主打产品,分别是i9-9900K、i7-9700K和i5-9600K。其中,i9-9900K设计为8核16线程,基础主频3.6…

java 连接kafka_设置多个kafka连接接收器

我正在研究从postgreSQL到HDFS的数据流 . 我在HDP 2.6沙箱上设置了融合环境 . 我对postgreSQL的jdbc源配置是namejdbc_1connector.classio.confluent.connect.jdbc.JdbcSourceConnectortasks.max1connection.urljdbc:postgresql://host:port/db?currentSchemaschema&useru…