Generera returtyp dynamiskt baserat på parameter i TypeScript
Jag har en funktion som tar emot en array av strängar och returnerar ett objekt vars nycklar är strängarna och varje värde är undefined:
function getInitialCharacteristics(names: string[]): ??? {
return names.reduce((obj, name) => ({ ...obj, [name]: undefined }), {});
}
Exempel på användning:
const result = getInitialCharacteristics(["hello", "world"]);
// result == { hello: undefined, world: undefined }
Nu undrar jag hur jag kan definiera rätt returvärde för getInitialCharacteristics med TypeScript. Jag skulle behöva använda generics eller på något sätt dynamiskt generera den typen. Är det möjligt?
Svar #1
Om du kommer att kalla denna funktion med konstanter eller strängliteraler kan TypeScript hjälpa dig att få en striktare typ för returobjektet
function getInitialCharacteristics<T extends string>(names: T[]): Record<T, undefined>
function getInitialCharacteristics(names: string[]): Record<string, undefined> {
return names.reduce((obj, name) => ({ ...obj, [name]: undefined }), {});
}
const result = getInitialCharacteristics(["hello", "world"]);
result.hello //ok
result.world //ok
result.helloo //err
Lekplatslänk
