第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

TypeScript字符串聯(lián)合到字符串?dāng)?shù)組

TypeScript字符串聯(lián)合到字符串?dāng)?shù)組

長風(fēng)秋雁 2019-12-04 09:57:35
我有一個(gè)字符串聯(lián)合類型,如下所示:type Suit = 'hearts' | 'diamonds' | 'spades' | 'clubs';我想要一種類型安全的方法來獲取可以在此字符串聯(lián)合中使用的所有可能的值。但是由于接口在很大程度上是設(shè)計(jì)時(shí)構(gòu)造,所以我能做的就是:export const ALL_SUITS = getAllStringUnionValues<Suit>({    hearts: 0,    diamonds: 0,    spades: 0,    clubs: 0});export function getAllStringUnionValues<TStringUnion extends string>(valuesAsKeys: { [K in TStringUnion]: 0 }): TStringUnion[] {    const result = Object.getOwnPropertyNames(valuesAsKeys);    return result as any;}這項(xiàng)工作正常,該函數(shù)可確保我始終傳遞一個(gè)對象,其中每個(gè)鍵都是字符串聯(lián)合中的一個(gè)元素,并且包括每個(gè)元素,并返回所有元素的字符串?dāng)?shù)組。因此,如果字符串并集發(fā)生更改,則對該函數(shù)的調(diào)用將在編譯時(shí)發(fā)生錯(cuò)誤(如果未更新)。但是問題是常量ALL_SUITSis 的類型簽名('hearts' | 'diamonds' | 'spades' | 'clubs')[]。換句話說,TypeScript認(rèn)為這是一個(gè)不包含一個(gè)或多個(gè)這些值(可能帶有重復(fù)項(xiàng))的數(shù)組,而不是一個(gè)僅包含一次所有值的數(shù)組,例如['hearts', 'diamonds', 'spades', 'clubs']。我真正想要的是通用getAllStringUnionValues函數(shù)指定它返回的一種方法['hearts', 'diamonds', 'spades', 'clubs']。我怎樣才能做到這一點(diǎn)一般,同時(shí)為干越好?
查看完整描述

3 回答

?
蠱毒傳說

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超3個(gè)贊

TypeScript 3.4的更新:

TypeScript 3.4附帶了更簡潔的語法,稱為“ const contexts”。它已經(jīng)合并到master中,因此在PR中應(yīng)該可以立即使用。


此功能將使通過使用as constor <const>關(guān)鍵字創(chuàng)建不可變(恒定)元組類型/數(shù)組成為可能。由于無法修改此數(shù)組,因此TypeScript可以安全地采用較窄的文字類型,['a', 'b']而不是較寬的類型,('a' | 'b')[]甚至string[]可以忽略該類型,并且我們可以跳過對tuple()函數(shù)的調(diào)用。


提及你的問題


但是,問題在于常量ALL_SUITS的類型簽名為('hearts'|'diamonds'|'spades'|'clubs')[]。 (...寧可這樣) ['hearts','diamonds','spades','clubs']


使用新的語法,我們可以準(zhǔn)確地實(shí)現(xiàn)以下目標(biāo):


const ALL_SUITS = <const> ['hearts', 'diamonds', 'spades', 'clubs'];  

// or 

const ALL_SUITS = ['hearts', 'diamonds', 'spades', 'clubs'] as const;


// type of ALL_SUITS is infererd to ['hearts', 'diamonds', 'spades', 'clubs']

有了這個(gè)不可變的數(shù)組,我們可以輕松地創(chuàng)建所需的聯(lián)合類型:


type Suits = typeof ALL_SUITS[number]  


查看完整回答
反對 回復(fù) 2019-12-04
  • 3 回答
  • 0 關(guān)注
  • 1471 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號