首页 > 解决方案 > 类型语法 - Typescript 中这种语法的含义是什么

问题描述

我是打字稿的新手;我不明白这种语法的含义;有人可以向我解释吗?

type Type1<K> = K extends string ? { [P in K]: string } : never;

如果类型 K 扩展字符串,那么 Type1 将是一个字符串数组的文档?就像是:

{"x": ["a", "b", "c"],
 "z": ["d", "e", "f"]
//etc
}
Or
{"x": "a",
    "z": "b"
//etc
}

标签: typescript

解决方案


让我们先看看{ [P in K]: string }这是一个映射类型。如果K是字符串文字类型的联合(例如:)'a' | 'b',则此类型的结果将是一个对象类型,其中这些名称作为键和string类型(so { a: string, b: string })。这实际上等价于预定义Record类型。

分布式条件K extends string ? ... : never 类型。这意味着如果是联合类型,则联合的每个成员都将被获取并通过映射类型。例如:K


type ex = Type1<'a' | 'b'> => 
    ('a' extends string ? { [P in 'a']: string } : never) | ('b' extends string ? { [P in 'b']: string } : never) =>
    ({ [P in 'a']: string }) | ({ [P in 'b']: string }) => 
    { a: string } | { b: string }

推荐阅读