有人可以解释一下“ [[O键]中的P:O [P];”)意味着什么?

时间:2018-11-16 15:06:15

标签: typescript

我是打字稿入门者,需要创建护照策略。我偶然发现了一条我完全不理解的行(完整代码请参见here)。

type StrategyCreated<T, O = T & StrategyCreatedStatic> = {
    [P in keyof O]: O[P];
};

有人可以用简单的英语解释这是什么意思吗?

2 个答案:

答案 0 :(得分:3)

它是一个映射类型。您可以阅读关于它们的模式here。基本思想是将给定类型(在您的情况下为O)映射到另一种类型。

它是通过从keyof O类型参数(P中的O([P in keyof O])迭代每个键并为该键分配新的类型来实现的。在这种情况下,类型与PO)中O[P]属性的原始类型相同。

此特定类型仅将O(这是TStrategyCreatedStatic的交集)映射为具有与原始交集相同属性的类型。目的可能是从结果类型中删除交集。

答案 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