在TypeScript的lib.d.ts
中考虑以下界面:
interface HTMLElement extends Element {
accessKey: string;
readonly children: HTMLCollection;
contentEditable: string;
readonly dataset: DOMStringMap;
dir: string;
draggable: boolean;
// ... many more
}
我如何只选择此界面中不属于readonly
的属性,而无需手动识别和输入所有属性(如下图所示)?
type WriteableHTMLElProps = Pick<HTMLElement, "accessKey"|"contentEditable" /* ... */>
注意:正确的解决方案也应该处理此扩展接口的非readonly
属性。
答案 0 :(得分:3)
我无法想到一种允许您在当前版本的TypeScript中自动执行此操作的机制。
为了做到这一点,您需要提供映射类型过滤的建议想法(假设readonly在最终实现中是可过滤的。
例如(under discussion中的语法为few places,具体取决于具体细节):
type OnlyReadonlyMembers<T> = {
[P in keyof T where T[P] is readonly]: T[P];
}