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

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

TypeScript字符串聯(lián)合到字符串數(shù)組

TypeScript字符串聯(lián)合到字符串數(shù)組

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

3 回答

?
蠱毒傳說

TA貢獻1895條經(jīng)驗 獲得超3個贊

TypeScript 3.4的更新:

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


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


提及你的問題


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


使用新的語法,我們可以準確地實現(xiàn)以下目標:


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']

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


type Suits = typeof ALL_SUITS[number]  


查看完整回答
反對 回復 2019-12-04
  • 3 回答
  • 0 關注
  • 1463 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

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