【问题标题】:What is the cleanest valid TypeScript equivalent of the three dots syntax?三点语法的最简洁有效的 TypeScript 等效项是什么?
【发布时间】:2016-10-27 11:07:47
【问题描述】:

我试图在我的 TypeScript/React 代码中过滤掉props,但是其余/扩展属性(三个点语法...)是not supported in TypeScript yet

const NavItemPass = (props) => {
    const { active, activeKey, activeHref, ...rest } = props;
    return <NavItem {...rest} />;
};

TypeScript 1.8 中最简洁的不可变等效语法是什么?

【问题讨论】:

  • 我正在尝试const props2 = Object.assign({}, props);,然后是delete props2.active,等等,但它似乎不起作用。
  • 请为三个点使用正确的名称,即“rest/spread properties”。
  • 感谢正式名称,搜索信息时手头有它。我已经更新了问题,但保留了标题,以便人们可以找到它的任何一种面额。

标签: javascript typescript syntax


【解决方案1】:

Babel 通过创建一个创建新对象的函数来做到这一点。您可能想要这样做,制作一个很好的可重复使用的,然后使用它。

我将给出一个 JavaScript 示例,您可以轻松地将其转换为 TypeScript:

function objectWithout(obj, keys) {
    let target = {};
    Object.keys(obj).forEach(k => {
        if (keys.indexOf(k) == -1) {
            target[k] = obj[k];
        }
    });
    return target;
}

然后

const NavItemPass = (props) => {
    return React.createElement(NavItem, objectWithout(props, ["active", "activeKey", "activeHref"]));
};

不是很满意。 :-|

【讨论】:

  • @ErwinMayer: :-) 希望 TypeScript 能很快得到传播和休息。他们非常有帮助。不过,与此同时,我积极希望其他人有比上述更好的解决方案。
猜你喜欢
  • 2018-02-22
  • 2016-07-14
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 2013-10-25
  • 2011-01-26
  • 2017-12-30
相关资源
最近更新 更多