3.typeScript是怎么定義對(duì)象類(lèi)型的接口救赐?

接口可以用來(lái)約束對(duì)象涧团、函數(shù)、以及類(lèi)的結(jié)構(gòu)和類(lèi)型

// 假設(shè)我們需要從后端拿取數(shù)據(jù),渲染到頁(yè)面泌绣,就可以這么定義接口:
interface List {    //interface定義List接口钮追,包含兩個(gè)成員
  readonly id: number; //readonly代表只讀,不可修改
    name: string;
    // [x: string]: any; 字符串索引簽名,用任意的字符串去索引List阿迈,可以得到任意的結(jié)果
    age?: number; //元媚?表示這個(gè)屬性可以有,也可以沒(méi)有(可選屬性)
}
interface Result {  // interface定義Result接口
    data: List[]
}
function render(result: Result) { // 定義渲染函數(shù)
    result.data.forEach((value) => {
        console.log(value.id, value.name)
        if (value.age) {
            console.log(value.age)
        }
        // value.id++ 聲明readonly后苗沧,++的話(huà)刊棕,會(huì)報(bào)錯(cuò),說(shuō)只讀屬性不許修改
    })
}
let result = {
    data: [
        {id: 1, name: 'A', sex: 'male'},
        {id: 2, name: 'B', age: 10}
    ]
}
render(result)
//如果把result換成data:[]數(shù)組的格式傳入待逞,就會(huì)報(bào)錯(cuò)甥角。讓編譯器繞過(guò)類(lèi)型檢查的解決方式:
//1.賦值給變量
//2.render({} as Result)類(lèi)型斷言: 表示明確的告訴編譯器,這個(gè)對(duì)象的類(lèi)型就是Result
//3.render(<Result>{}) 建議使用第一種飒焦,這種方法在react中會(huì)產(chǎn)生歧義

當(dāng)你不確定一個(gè)接口中有多少個(gè)屬性的時(shí)候蜈膨,就可以使用可索引類(lèi)型的接口。

共有支持兩種索引簽名:字符串和數(shù)字牺荠。 可以同時(shí)使用兩種類(lèi)型的索引翁巍,但是數(shù)字索引的返回值必須是字符串索引返回值類(lèi)型的子類(lèi)型。 這是因?yàn)楫?dāng)使用 number來(lái)索引時(shí)休雌,JavaScript會(huì)將它轉(zhuǎn)換成string然后再去索引對(duì)象灶壶。 也就是說(shuō)用 100(一個(gè)number)去索引等同于使用"100"(一個(gè)string)去索引,因此兩者需要保持一致杈曲。

用數(shù)字索引的接口

//注意:數(shù)字索引簽名的返回值驰凛,一定要是字符串索引簽名返回值的子類(lèi)型?js會(huì)對(duì)類(lèi)型進(jìn)行轉(zhuǎn)換担扑,將number轉(zhuǎn)換成string恰响,這樣就能保持類(lèi)型的兼容性
interface StringArray {
  [index: number]: string  //用任意數(shù)字去索引StringArray,都會(huì)得到一個(gè)string涌献。
}
let chars: StringArray = ['a', 'b']

用字符串索引的接口

interface Names {
    [x: string]: any; // 用任意的string去索引Names胚宦,得到的結(jié)果都是any
    // y: number;
    [z: number]: number; // 數(shù)字簽名的索引返回值一定要是字符串索引返回值的子類(lèi)型
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市燕垃,隨后出現(xiàn)的幾起案子枢劝,更是在濱河造成了極大的恐慌,老刑警劉巖卜壕,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件您旁,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡轴捎,警方通過(guò)查閱死者的電腦和手機(jī)鹤盒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)蚕脏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人昨悼,你說(shuō)我怎么就攤上這事蝗锥≡韭澹” “怎么了率触?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)汇竭。 經(jīng)常有香客問(wèn)我葱蝗,道長(zhǎng),這世上最難降的妖魔是什么细燎? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任两曼,我火速辦了婚禮,結(jié)果婚禮上玻驻,老公的妹妹穿的比我還像新娘悼凑。我一直安慰自己,他們只是感情好璧瞬,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布户辫。 她就那樣靜靜地躺著,像睡著了一般嗤锉。 火紅的嫁衣襯著肌膚如雪渔欢。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,929評(píng)論 1 290
  • 那天瘟忱,我揣著相機(jī)與錄音奥额,去河邊找鬼。 笑死访诱,一個(gè)胖子當(dāng)著我的面吹牛垫挨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播触菜,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼九榔,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了玫氢?” 一聲冷哼從身側(cè)響起帚屉,我...
    開(kāi)封第一講書(shū)人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎漾峡,沒(méi)想到半個(gè)月后攻旦,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡生逸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年牢屋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了且预。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡烙无,死狀恐怖锋谐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情截酷,我是刑警寧澤涮拗,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站迂苛,受9級(jí)特大地震影響三热,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜三幻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一就漾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧念搬,春花似錦抑堡、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至荣倾,卻和暖如春悯搔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背舌仍。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工妒貌, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人铸豁。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓灌曙,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親节芥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子在刺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350