iT邦幫忙

0

TS 如何將物件型別中,型別為string的key提取出來?

  • 分享至 

  • xImage

例如下面的型別
請問我要怎麼得到型別為string的key
或著我要怎麼把型別為string的東西提取出來產生另一個object型別?
拜託各位指點,謝謝

type Tfoo = {
  a: string
  b: string
  c: string
  d: boolean
  e: boolean
  f: number
  g: {
    h: string
    i: number
  }
}
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

1
小哈片刻
iT邦研究生 4 級 ‧ 2022-09-29 00:44:27
最佳解答

檢查型別就可以了

let data: Tfoo = {...};

let newData = {};
for(let key in data) {
    if(typeof data[key] === 'string') {
        newData[key] = data[key];
    }
}
silarce iT邦新手 5 級 ‧ 2022-09-29 09:38:15 檢舉

感謝您的回答
雖然與我預期的解答有些差別
請問typeScript是不是沒有辦法直接從object型別抽出或過濾指定型別的key?
而只能如上面的做法先建立實際的物件再將符合條件的propert過濾出來然後再用typeof建立型別?

小哈片刻 iT邦研究生 4 級 ‧ 2022-09-29 09:45:38 檢舉

沒錯

0
bill0704
iT邦新手 5 級 ‧ 2022-10-02 20:48:36

有個很難用的方法,但filtering特定型別是可以的:

type UserProps {
    username: string 
    password: string 
    isAuth?: boolean //這裡必須加?是痛點不然會噴錯
  }
type StringUserProps = {
    [propName: string]:string
}
let isOk:UserProps&StringUserProps={
    username:"jaja",
    password:"sss",
   

}

你甚至可以把你要filtering的object的key全加?再用交集去提取特定型別的key
好處是可以吃到IDE的參數提示但是不會噴錯
或是乾脆把不同的型別分開寫在用聯集去搞也行

我要發表回答

立即登入回答