如何从界面中仅选择非只读字段?

时间:2017-11-20 16:31:16

标签: typescript

在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属性。

1 个答案:

答案 0 :(得分:3)

我无法想到一种允许您在当前版本的TypeScript中自动执行此操作的机制。

为了做到这一点,您需要提供映射类型过滤的建议想法(假设readonly在最终实现中是可过滤的。

例如(under discussion中的语法为few places,具体取决于具体细节):

type OnlyReadonlyMembers<T> = {
    [P in keyof T where T[P] is readonly]: T[P];
}