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.pswp.cn/news/277525.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/277525.shtml
英文地址,請注明出處:http://en.pswp.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…