![](/img/trans.png)
[英]How can I map values of object keys to the same object in 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 我希望foo
和bar
是相同的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' }
我認為打字稿應該能夠推斷出這一點。 但是我該如何寫類型呢?
這個有可能。 您可以創建給定泛型類型的所有可能的foo
和bar
組合的聯合,如下所示:
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.