我有一個接收兩個引數的函式,我們稱它們為 X 和 Y,以及一個定義簡單物件的型別 Z。我想知道是否有辦法使用第一個引數 X 來訪問 Z 的型別以動態定義第二個引數必須是由于 X 的正確型別。
下面的一些代碼來說明:
type MyType = {
key1: string,
key2: number,
key3: Array<number>
}
// I know that I can't assigned the y type like bellow, but's it's just to illutraste what I want
function myFunction(x: keyof MyType, y: MyType[x]) {
// function logic
// ...
}
// Then, i wan't the following behavior
myFunction('key1', 'some string'); // It compiles/works
myFunction('key1', 1); // It gives error
myFunction('key2', 1); // It compiles/works
myFunction('key3', 'another string'); // It gives error
我想要的效果能達到嗎?如果是這樣,怎么做?
uj5u.com熱心網友回復:
是的,您可以通過為函式提供兩個泛型型別引數(我稱它們為KeyType和ValueType)來實作這一點,您KeyType在定義中使用它們ValueType,如下所示:
function myFunction<
KeyType extends keyof MyType,
ValueType extends MyType[KeyType]
>(x: KeyType, y: ValueType) {
// function logic
// ...
}
當您呼叫函式時,您不必為它們提供顯式型別引數,TypeScript 通常可以從使用情況中推斷出它們,因此您的所有使用示例都可以完全按照您的意愿作業而無需更新。
游樂場鏈接
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/497072.html
標籤:打字稿
