如何合并 "Omit" 和 "Pick"?
How do I combine "Omit" and "Pick"?
我想在嵌套的 属性 中更改界面中的类型。
我已经尝试 Omit<Pick<A, "field">, "a">
并使用交集类型 &
。
interface A {
field: {
a: string; // I want to change this to 'number'
b: string;
};
}
interface B {
field: Omit<Pick<A, "field">, "a"> & { a: number };
}
let c: B = {
field: {
a: 1,
b: "B"
}
};
上面的代码给我一个错误,上面写着
Type '{ a: number; b: string; }' is not assignable to type 'Pick<Pick<A, "field">, "field"> & { a: number; }'.
Object literal may only specify known properties, and 'b' does not exist in type 'Pick<Pick<A, "field">, "field"> & { a: number; }'.
Pick
返回仅包含选取的属性的对象类型。所以 Pick<A, 'field'>
将是 { field: { a: string; b: string; } }
。您想要 field
的类型,您可以使用索引类型查询 A[field]
(这将是 { a: string; b: string; }
):
interface A {
field: {
a: string; // I want to change this to 'number'
b: string;
};
}
interface B {
field: Omit<A["field"], "a"> & { a: number };
}
let c: B = {
field: {
a: 1,
b: "B"
}
};
如果 A
有其他属性,您还可以扩展 A
的版本,省略 field
以保留其他属性:
interface B extends Omit<A, "field"> {
field: Omit<A["field"], "a"> & { a: number };
}
我想在嵌套的 属性 中更改界面中的类型。
我已经尝试 Omit<Pick<A, "field">, "a">
并使用交集类型 &
。
interface A {
field: {
a: string; // I want to change this to 'number'
b: string;
};
}
interface B {
field: Omit<Pick<A, "field">, "a"> & { a: number };
}
let c: B = {
field: {
a: 1,
b: "B"
}
};
上面的代码给我一个错误,上面写着
Type '{ a: number; b: string; }' is not assignable to type 'Pick<Pick<A, "field">, "field"> & { a: number; }'.
Object literal may only specify known properties, and 'b' does not exist in type 'Pick<Pick<A, "field">, "field"> & { a: number; }'.
Pick
返回仅包含选取的属性的对象类型。所以 Pick<A, 'field'>
将是 { field: { a: string; b: string; } }
。您想要 field
的类型,您可以使用索引类型查询 A[field]
(这将是 { a: string; b: string; }
):
interface A {
field: {
a: string; // I want to change this to 'number'
b: string;
};
}
interface B {
field: Omit<A["field"], "a"> & { a: number };
}
let c: B = {
field: {
a: 1,
b: "B"
}
};
如果 A
有其他属性,您还可以扩展 A
的版本,省略 field
以保留其他属性:
interface B extends Omit<A, "field"> {
field: Omit<A["field"], "a"> & { a: number };
}