访问对象上具有默认值的字段时如何修复流错误?

How to fix Flow error when accessing a field with default value on an object?

例子

Flow REPL

问题

我正在尝试访问我认为应该 始终存在的对象上的字段。

下面的流程错误如何解决?

片段

problem = (arg: {refKey: string} = {}) => {
  const {refKey = 'ref', ...rest} = arg;
  return {
    [refKey]:arg[refKey],
    ...rest
  };
};

错误:

19:       [refKey]:arg[refKey],
                       ^ Cannot get `arg[refKey]` because property `ref` is missing in object type [1].
References:
16:   problem = (arg: {refKey: string} = {}) => {
                      ^ [1]

发生这种情况是因为您在声明时设置了值。

如果要设置默认值,可以在默认参数中设置,像这样:

problem = (arg: {refKey: string} = {refKey: 'ref'}) => {
  const {refKey, ...rest} = arg;
  return {
    [refKey]:arg[refKey],
    ...rest
  };
};

编辑

好吧,我想我误解了这个问题,现在明白了(!)。

如果默认的属性会被命名为'ref',你可以这样做:

problem = (arg: {refKey: string, ref: any} = {}) => {
  const {refKey = 'ref', ...rest} = arg;
  return {
    [refKey]:arg[refKey],
    ...rest
  };
};