简体   繁体   English

推断对应键的值类型

[英]Infer type of value of corresponding key

Let's consider the following generic:让我们考虑以下泛型:

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"> represents a {key: "myKey", value: ...} object based on MyType. KV<MyType, "myKey">代表一个基于 MyType 的{key: "myKey", value: ...} object。

We can use it like this:我们可以这样使用它:

// 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 is a valid object, but we have to specify the key twice. kv是有效的 object,但我们必须指定密钥两次。 How could we update KV to infer the key automatically?我们如何更新 KV 以自动推断密钥?

Thanks in advance!提前致谢!

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

Can you try你能试一下吗

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

And use it like并像使用它一样

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM