VSCode 如何修复 typescript 高亮错误 Argument of type {} is not assignable to parameter of
VSCode how to fix typescript highlight error Argument of type {} is not assignable to parameter of
我应该在函数 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,
},
};
};
这里有一个可能的解决方案:
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
覆盖
我应该在函数 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,
},
};
};
这里有一个可能的解决方案:
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
覆盖
- 顺序很重要!