Typescript 如何从接口中仅拾取非只读字段?

Typescript 如何从接口中仅拾取非只读字段?,typescript,Typescript,考虑TypeScript的lib.d.ts中的以下接口: interface HTMLElement extends Element { accessKey: string; readonly children: HTMLCollection; contentEditable: string; readonly dataset: DOMStringMap; dir: string; draggable: boolean; // ... ma

考虑TypeScript的
lib.d.ts
中的以下接口:

interface HTMLElement extends Element {
    accessKey: string;
    readonly children: HTMLCollection;
    contentEditable: string;
    readonly dataset: DOMStringMap;
    dir: string;
    draggable: boolean;
    // ... many more
}
如何仅从该界面中选择非
只读的属性,而不必手动识别和输入所有属性(如下所示)

type writeablehtmleprops=Pick

注意:适当的解决方案还应该处理此扩展接口的非
只读属性。

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

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

例如(语法为a,具体取决于具体细节):

type only readonlymembers={
[P在T的键中,其中T[P]是只读的]:T[P];
}

我想不出一种机制可以让您在当前版本的TypeScript中自动执行此操作

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

例如(语法为a,具体取决于具体细节):

type only readonlymembers={
[P在T的键中,其中T[P]是只读的]:T[P];
}

我在创建我的版本时没有发现这个问题。但是,看!现在@DanielM有一个建议的解决方案,这些都是一些非常神秘的类型–在他的解决方案中,有一些构造我甚至都不认识,而且我在跟上TypeScript更新方面也毫不懈怠。谢谢你告诉我这个问题!我在创建时没有发现这个问题但你看,@DanielM现在有一个提议的解决方案,这些都是一些非常神秘的类型——在他的解决方案中有一些我甚至都不认识的结构,而且我在跟上打字脚本的更新方面也毫不懈怠。谢谢你给我指出这一点!
type WriteableHTMLElProps = Pick<HTMLElement, "accessKey"|"contentEditable" /* ... */>
type OnlyReadonlyMembers<T> = {
    [P in keyof T where T[P] is readonly]: T[P];
}