VSCode 如何修复打字稿高亮错误类型 {} 的参数不可分配给

时间:2021-06-03 10:18:09

标签: javascript node.js typescript nodes syntax-highlighting

我应该在函数 createField 中做什么才能消除这个语法错误突出显示?

const createField = (
    dataType,
    options = {
        required: false,
        label: null,
        min: Number.NEGATIVE_INFINITY,
        max: Number.POSITIVE_INFINITY,
        email: false,
        match: false
    }
) => {
    return {
        dataType,
        options: {
            ...options,
            label: options.label && options.label.toString() || null,
        },
    };
};

enter image description here

1 个答案:

答案 0 :(得分:1)

这里有一个可能的解决方案:

interface CreateFieldOptions {
  required?: boolean;
  // you need to change the type here
  label?: unknown;
  min?: number;
  max?: number;
  email?: boolean;
  match?: boolean;
}
const createFieldDefaultOptions: CreateFieldOptions = {
  required: false,
  label: null,
  min: Number.NEGATIVE_INFINITY,
  max: Number.POSITIVE_INFINITY,
  email: false,
  match: false
}

const createField = (
    dataType,
    options: CreateFieldOptions = {}
) => {
    return {
        dataType,
        options: {
            ...createFieldDefaultOptions,
            ...options,
            label: options.label && options.label.toString() || null,
        },
    };
};

有哪些变化?

  • 添加一个界面来管理选项类型 -> CreateFieldOptions
    • 所以它可以重复使用
  • 将默认选项提取到一个单独的变量中 -> createFieldDefaultOptions
    • 您的意图似乎是将默认选项与提供的传递选项合并。但这无法通过参数分配实现,因此必须稍后完成(请参阅最后一个要点)
  • options 参数的类型现在是可选的 CreateFieldOptions
  • 返回的具有 options 属性的对象由 createFieldDefaultOptions 扩展
    • 顺序很重要! createFieldDefaultOptions 需要是第一个,以便它可以被提供的 options
    • 覆盖