限制打字稿接口不具有来自父级的少量属性

Restrict typescript interface to not have few properties from parent

我有两个打字稿界面如下:

interface A {
    elem1: string;
    elem2: string;
    elem3: string;
    elem4: string;
}

interface B extends A {
   elem5: string;
}

现在我希望当我定义一个 B 类型的变量时,它不应该有来自接口 A 的 elem1elem2。 打字稿有办法做到这一点吗?

Omit Keys 是你的朋友。它是一种实用类型,通过省略提供的键来构造类型。

这是一个例子

TS Playground Link

interface A {
    elem1: string;
    elem2: string;
    elem3: string;
    elem4: string;
}

interface B extends Omit<A, "elem1" | "elem2"> {
   elem5: string;
}

// Error
const b: B = {
    elem2: 'sdsd',
    elem3: 'wewe',
    elem4: 'wewe',
    elem5: 'wewe',
    
}

// OK
const b1: B = {
    elem3: 'wewe',
    elem4: 'wewe',
    elem5: 'wewe',
}