我是打字稿入门者,需要创建护照策略。我偶然发现了一条我完全不理解的行(完整代码请参见here)。
type StrategyCreated<T, O = T & StrategyCreatedStatic> = {
[P in keyof O]: O[P];
};
有人可以用简单的英语解释这是什么意思吗?
答案 0 :(得分:3)
它是一个映射类型。您可以阅读关于它们的模式here。基本思想是将给定类型(在您的情况下为O
)映射到另一种类型。
它是通过从keyof O
类型参数(P
中的O([P in keyof O]
)迭代每个键并为该键分配新的类型来实现的。在这种情况下,类型与P
(O
)中O[P]
属性的原始类型相同。
此特定类型仅将O
(这是T
和StrategyCreatedStatic
的交集)映射为具有与原始交集相同属性的类型。目的可能是从结果类型中删除交集。
答案 1 :(得分:1)
keyof O
部分是 O 对象的所有键的列表。
P in
声明P的值应包含在可能值的列表中,在您的示例中,这些值可能是O
的键,实际上它只是类型T & StrategyCreatedStatic
的代理。因此,该行将显示为“ [[类型O的键中包含的属性]:O [P];”。 “ O [P]”确定 P 属性的值类型。
例如:
interface Foo {
hello: string;
world: number;
}
type StrategyCreated<T, O = T & StrategyCreatedStatic> = {
[P in keyof O]: O[P];
};
const a: StrategyCreated<Foo> = { hello: "one", world: 2 }; // valid
const b: StrategyCreated<Foo> = { foo: true, bar: false }; // invalid