从界面中排除动态密钥

时间:2019-04-16 11:27:36

标签: typescript

我正在尝试使用猫鼬模式进行更好的键入,但是似乎SchemaTypeOpts接口具有[other: string]: any;,这会阻止vcsode intellisense帮助我。

为解决这个问题,我尝试了以下方法,希望它可以标识动态专有性创建的密钥(因为其名称为other):

const x: Pick<SchemaTypeOpts<any>, Exclude<keyof SchemaTypeOpts<any>, "other">> = {
    bob: "", // expected an error here
    type: String
}

但是当界面具有动态属性时,看来Exclude并没有真正起作用:/

例如: 这有效:

interface test2 {
    x?: number,
    y?: string,
    z?: number,
}


const x: Pick<test2, Exclude<keyof test2, "z">> = {
    y: "",
    z: 5, // got error here because z is excluded
    bob: "" //got error here because bob is not in the interface
}

这什么都不做:

interface test2 {
    x?: number,
    y?: string,
    z?: number,
    [other: string]: any;
}


const x: Pick<test2, Exclude<keyof test2, "z">> = {
    y: "",
    z: 5,
    bob: ""
}

如何在不重新声明整个内容的情况下从界面中删除[other: string]: any

0 个答案:

没有答案