如何定义通用函数拒绝来自Typescript对象的键?

时间:2018-09-01 08:25:48

标签: typescript types typescript-typings

我正在尝试定义一个实用程序函数来清理特定键的对象。

win.webContents.send('asynchronous-message', {'SAVED': 'File Saved'});

但是编译器抱怨/** * Strip all the __typenames from the payload. */ interface WithTypename { __typename?: string; }; type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>; const omitTypename = <T extends WithTypename>({ __typename, ...rest }: T): Omit<T, '__typename'> => ({ ...rest }); 的函数参数。 只能从对象类型创建其他类型。

1 个答案:

答案 0 :(得分:1)

这是Typescript中传播的已知限制,here是最近出现的一个问题。

一种可能的解决方法是使用Object.assign,然后删除多余的属性。

/**
 * Strip all the __typenames from the payload.
 */
interface WithTypename {
__typename?: string;
};

type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;

const omitTypename = <T extends WithTypename>(o: T): Omit<T, '__typename'> => {
    let r = Object.assign({}, o);
    delete r.__typename;
    return r;
}