簡體   English   中英

Object 文字鍵值作為類型(Typescript)。 我做對了/做對了嗎?

[英]Object literal key value as type (Typescript). Am I doing it right/the right thing?

我有文字 object,我希望能夠將它用作 function 中的參數,例如

const SOCIAL_PROVIDER = {
  Google: 'Google',
  Facebook: 'Facebook'
}

handle(SOCIAL_PROVIDER.Google) // OK
handle(SOCIAL_PROVIDER.Twitter) // want TS to throw error
handle('Google') // want TS to throw error

然后是 function 簽名類型,我讓它工作的唯一方法如下

type SocialProvider = {
  Google: 'Google',
  Facebook: 'Facebook'
};

const SOCIAL_PROVIDER: SocialProvider = {
  Google: 'Google',
  Facebook: 'Facebook'
};

type handle = (value: keyof typeof SOCIAL_PROVIDER) => void

我做得對還是正確處理? 還是有更好的方法?

謝謝。

使用 TypeScript枚舉

enum SocialProvider = {
  Google: 'Google',
  Facebook: 'Facebook'
};

type handle = (value: SocialProvider) => void

例子:

const func: handle = value => {
  // Do something
}

func(SocialProvider.Google);

就我個人而言,我認為僅使用您的 Providers 創建一個類型既好又簡單..

例如..

type SOCIAL_PROVIDER = 'Google' | 'Facebook';
const SOCIAL_PROVIDER_HANDLE: Record<SOCIAL_PROVIDER, string> = {
  Facebook: 'FB',
  Google: 'GOOGLE'
}

function handle(provider: SOCIAL_PROVIDER) {
  console.log(SOCIAL_PROVIDER_HANDLE[provider]);  
}

handle('Google') // OK
handle('Twitter') // want TS to throw error

TS游樂場

如果你想保持干燥,另一個想法。 例如。 在上面的GoogleFacebook得到重復,你可以讓 TS 為你構建類型。

例如。

const SOCIAL_PROVIDER_HANDLE = {
  Facebook: 'FB',
  Google: 'GOOGLE'
};

type SOCIAL_PROVIDER = keyof typeof SOCIAL_PROVIDER_HANDLE;

function handle(provider: SOCIAL_PROVIDER) {
  console.log(SOCIAL_PROVIDER_HANDLE[provider]);  
}

handle('Google') // OK
handle('Twitter') // want TS to throw error

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM