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

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

打字稿 | 僅允許傳遞滿足傳遞鍵類型的值

打字稿 | 僅允許傳遞滿足傳遞鍵類型的值

湖上湖 2023-02-17 11:06:49
讓我解釋一下我想要實現(xiàn)的目標以及問題所在。我有以下界面:interface ExampleInterface {  a: string;  b: number;}我有以下實現(xiàn)我的變量ExampleInterface:const exampleVariable: ExampleInterface = {  a: 'hello world',  b: 0,}我有以下函數(shù)必須修改我的exampleVariable,這個函數(shù)有兩個參數(shù),第一個參數(shù)必須是一個鍵exampleVariable,第二個參數(shù)必須是一個新值,我想分配給給定的鍵(傳遞為第一個參數(shù)):const setState = (key, value) => {  exampleVariable[key] = value;}我想要實現(xiàn)的是:我想確保如果我傳遞一個等于的鍵作為a第一個參數(shù),那么 Typescript 不會讓我傳遞除類型值之外的任何內容,string因為內部ExampleInterface類型a等于string。我試圖做什么:我嘗試為我的函數(shù)參數(shù)添加以下類型:const setState = (key: keyof ExampleInterface, value: ExampleInterface[keyof ExampleInterface]) => {  exampleVariable[key] = value;}但我不斷收到以下 Typescript 錯誤:Type 'ExampleInterface[keyof ExampleInterface]' is not assignable to type 'string & number'.  Type 'string' is not assignable to type 'string & number'.    Type 'string' is not assignable to type 'number'.ts(2322)我假設函數(shù)參數(shù)的類型設置不正確。任何建議表示贊賞。謝謝。
查看完整描述

2 回答

?
倚天杖

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

該錯誤是因為您將 key 參數(shù)指定為 ExampleInterface 的鍵,并且它有 2 種數(shù)據(jù)類型,即字符串和數(shù)字。KeyOf 將兩種數(shù)據(jù)類型都應用于傳遞的變量,這違反了分配數(shù)據(jù)類型的規(guī)則。因此,當您將類型擴展并應用到它映射到鍵的正確類型的值時,您可以將 keyOf 擴展為泛型。


以下是您的代碼的修復。


 setState<K extends keyof ExampleInterface>(key: K, value: ExampleInterface[K]){

    this.exampleVariable[key] = value;

  }

但是您可以重寫代碼以設置泛型類型的值,下面是示例。


setProperty<T, K extends keyof T>(obj: T, key: K, value: T[K]) {

    obj[key] = value;

  }


查看完整回答
反對 回復 2023-02-17
?
慕的地8271018

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

我想這就是你要找的:


interface ExampleInterface {

  [key: string]: number;

}

const exampleVariable: ExampleInterface = {

  ['hello world'] : 0,

}


console.log(exampleVariable)


const setState = (key: string, value: number) => {

  exampleVariable[key] = value;

}


setState('hello world', 1);

console.log(exampleVariable)

查看索引簽名以便更好地理解。


如果在setState中你想通過接口引用接口類型,這也是有效的:


const setState = (keyArg: keyof ExampleInterface, value: ExampleInterface['key']) => {

  exampleVariable[keyArg] = value;

}

那就是您接近的語法。


查看完整回答
反對 回復 2023-02-17
  • 2 回答
  • 0 關注
  • 158 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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