簡體   English   中英

推斷對應鍵的值類型

[英]Infer type of value of corresponding key

讓我們考慮以下泛型:

type KV<T, K extends keyof T> = {
  key: K; // any key of T
  value: T[K]; // corresponding value type of the key
}

KV<MyType, "myKey">代表一個基於 MyType 的{key: "myKey", value: ...} object。

我們可以這樣使用它:

// random type
type MyType = {
  a: number;
  b: string;
}

// below, how could we infer K from the 'key: "a"' instead of setting it manually?
const kv : KV<MyType, "a"> = {
  key: "a",
  value: 47
}

kv是有效的 object,但我們必須指定密鑰兩次。 我們如何更新 KV 以自動推斷密鑰?

提前致謝!

Playground: https://www.typescriptlang.org/play?ssl=16&ssc=2&pln=1&pc=1#code/C4TwDgpgBA0gagHgCoBpZQgD2BAdgEwGcoBrCEAewDMokA+KAXigG8AoKU8gLlgG4oAekFQAhrhBdJ1WhygA3UQBsArhF5IA2jAC6A4VADGFAE4mIhMBQIBLXAHMFytVFCQoM4AAtoZEGwBfNjYDE3F8CgBbV3AINjdoAFkQJFimVjlRXlwVSIAjCBM+OTzeQmATO3tioJCRAqUKAHc0L2ajChUlfCgm6DsqQvQqEyjXHygAcj9eACJRWcmoO3KIUR6ZQghgYCrl4ChI8RVlJRAAfjZjXHLSeSheeARk1Mg0edmGZnZOGagPlByRSqdRQAAsAHZAkA

你能試一下嗎

type KV<T> = {
  [K in keyof T]: {
    key: K; // any key of T
    value: T[K]; // corresponding value type of the key
  }
}[keyof T]

並像使用它一樣

const kv: KV<MyType> = {
  key: "a",
  value: 47
}

暫無
暫無

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

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