typescript - Hur man härleder tuppelns index 0 i en tvådimensionell array av tupler till literalt typ?
Jag har en arraytyp av tupler, hur gör man så att TypeScript härleder index 0 av tupler som en union?
Exempel :
type KV = [string, string];
type KVs = KV[];
function sample(param: KVs) {
return param.map(([key]) => key);
}
// here result is: string[]
const result = sample([
["a", "b"],
["c", "d"],
]);
Hur kan jag göra så att resultattypen blir en array av "a" | "c"?
Svar #1
Du kan använda generics:
type KV<T extends string, U extends string> = [T, U];
function sample<T extends string, U extends string>(param: KV<T, U>[]) {
return param.map(([key]) => key);
}
// result: ("a" | "c")[]
const result = sample([
["a", "b"],
["c", "d"],
]);
Detta typer KV som en tuppel med två generiska parametrar, båda som måste vara strängar, men som också kan vara en smalare typ som ett strängliteral. I detta fall kommer TypeScript att välja den smalaste typen för en given användning.
TS Lekplats
