如何在不发出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?
答案 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 });