如何在不散发JS的情况下从类型中删除属性?

时间:2017-12-29 13:52:49

标签: typescript

如何在不发出js的情况下从类型中删除属性?

我知道如何使用对象传播删除类型:

interface SomeType {
  one: string,
  two: number,
  foo: Date,
}

let obj: SomeType = {} as any;
const { foo, ...restOfObj } = obj;
type _withoutFoo = typeof restOfObj;

interface SomeTypeWithoutFoo extends _withoutFoo { }

但我的问题是它会发出不必要的javascript,而且对于那些不熟悉打字稿或更新的javascript功能的开发人员来说,这看起来有点令人困惑。

有没有办法在不使用对象传播的情况下从属性中提取属性?或者有没有办法不在那里发出javascript?

1 个答案:

答案 0 :(得分:1)

TypeScript 2.8添加了一些有用的类型组合器。您可以使用Exclude

interface SomeType {
  one: string,
  two: number,
  foo: Date,
}

type Remove<T, K> = {
    [P in Exclude<keyof T, K>]: T[P];
};

interface SomeTypeWithoutFoo extends Remove<SomeType, 'foo'> { }

function f(stwf: SomeTypeWithoutFoo) { return f; }

f({ one: 'a', two: 2 });