簡體   English   中英

如何告訴 Typescript 兩個對象鍵必須相同?

[英]How can I tell Typescript that two object keys must be the same?

我想在 JS/TS 記錄上定義一個類型(即帶有鍵和值的東西):

type Args<R extends object> = {
  foo: keyof R
  bar: keyof R
}

如何告訴 Typescript 我希望foobar相同keyof R

我可以做這個:

type Args<R extends object, K extends keyof R> = {
  foo: K
  bar: K
}

但是所有Args類型的客戶端都必須手動指定類型K

type Pizza = {
  name:   string
  radius: int
}

const myArgs: Args<Pizza, 'name'> = { foo: 'name', bar: 'name' }

我認為打字稿應該能夠推斷出這一點。 但是我該如何寫類型呢?

這個有可能。 您可以創建給定泛型類型的所有可能的foobar組合的聯合,如下所示:

type Args<R extends object> = {
  [K in keyof R]: {
    foo: K,
    bar: K
  }
}[keyof R]

這將導致所需的行為:

type Pizza = {
  name:   string
  radius: number
}

const myArgs1: Args<Pizza> = { 
  foo: 'name', 
  bar: 'name' 
}
const myArgs2: Args<Pizza> = { 
  foo: 'name', 
  bar: 'radius' 
} // Error: "name"' is not assignable to type '"radius"

操場

暫無
暫無

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

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