typescript - Hur skapar man ett alias för typ?


Jag har många funktioner med generisk typ KEY extends keyof Setting för att begränsa typer. Till exempel:

setValue('name', 'Alex') // ok
setValue('name', false) // error
setValue('name', 30) // error
setValue('isVerified', true) // ok

type Setting = {
    name: string,
    age: number,
    isVerified: boolean,
}

type SettingObject<KEY extends keyof Setting> = { [P in KEY]: Setting[P] }

async function setValue<KEY extends keyof Setting>(key: KEY, value: Setting[KEY]): Promise<void> { ... }

async function setValueArray<KEY extends keyof Setting>(values: SettingObject<KEY>): Promise<void> { ... }

async function getValue<KEY extends keyof Setting>(key: KEY): Promise<Setting[KEY]> { ... }

async function getValueArray<KEY extends keyof Setting>(keys: KEY[]): Promise<SettingObject<KEY>> { ... }

Finns det ett sätt att skapa en kort alias för KEY extends keyof Setting

// pseudocode
type SettingKey = KEY extends keyof Setting

Svar #1

KEY är inte en typ, det är ett typargument, du kan inte ge det ett alias. Du kan däremot ge keyof Setting ett alias som

type SKey = keyof Setting
// ...
type SettingObject<KEY extends SKey> = { [P in KEY]: Setting[P] }