如何只将一些值传递给 args 对象?
How do I pass only some values into args object?
有没有办法在 args 中只传入一个参数,而让其他值在 TypeScript 中默认?由于智能感知,我不想要 "args = {}" 并在函数内声明默认值。
function generateBrickPattern (
wallWidth: number,
wallHeight: number,
args = {
maxBrickWidth: 100,
maxBrickHeight: 50,
minBrickWidth: 50,
minBrickHeight: 25
}) {}
generateBrickPattern(500,500,{maxBrickWidth: 75}) //Prefered
generateBrickPattern(500,500,{maxBrickWidth: 75,
maxBrickHeight: 50,
minBrickWidth: 50,
minBrickHeight: 25}) //Not wanted
首选语法给出以下错误。
Argument of type '{ maxBrickWidth: number; }' is not assignable to
parameter of type '{ maxBrickWidth: number; maxBrickHeight: number;
minBrickWidth: number; minBrickHeight: number; }...'.
您必须实际定义最后一个参数的类型,而不是让 TypeScript 推断它。
试试这个:
interface BrickPatternOptions {
maxBrickWidth?: number;
maxBrickHeight?: number;
minBrickWidth?: number;
minBrickHeight?: number;
}
function generateBrickPattern (
wallWidth: number,
wallHeight: number,
args: BrickPatternOptions = {
maxBrickWidth: 100,
maxBrickHeight: 50,
minBrickWidth: 50,
minBrickHeight: 25
}) {}
或者,如果您愿意,也可以将其内联:
function generateBrickPattern (
wallWidth: number,
wallHeight: number,
args: {
maxBrickWidth?: number,
maxBrickHeight?: number,
minBrickWidth?: number,
minBrickHeight?: number
} = {
maxBrickWidth: 100,
maxBrickHeight: 50,
minBrickWidth: 50,
minBrickHeight: 25
}) {}
您可以通过使用默认值解构 args
来做到这一点:
function generateBrickPattern (
wallWidth: number,
wallHeight: number,
{
maxBrickWidth: maxBrickWidth = 100,
maxBrickHeight: maxBrickHeight = 50,
minBrickWidth: minBrickWidth = 50,
minBrickHeight: minBrickHeight = 25
} = {}
) {
console.log(maxBrickWidth);
}
如果您不想解构,您可以将提供的 args
与默认值合并,如下所示:
interface BrickPatternOptions {
maxBrickWidth: number;
maxBrickHeight: number;
minBrickWidth: number;
minBrickHeight: number;
}
function generateBrickPattern (
wallWidth: number,
wallHeight: number,
args: Partial<BrickPatternOptions> = {}
) {
const options: BrickPatternOptions = {
maxBrickWidth: 100,
maxBrickHeight: 50,
minBrickWidth: 50,
minBrickHeight: 25,
...args
};
console.log(options.maxBrickWidth);
}
有没有办法在 args 中只传入一个参数,而让其他值在 TypeScript 中默认?由于智能感知,我不想要 "args = {}" 并在函数内声明默认值。
function generateBrickPattern (
wallWidth: number,
wallHeight: number,
args = {
maxBrickWidth: 100,
maxBrickHeight: 50,
minBrickWidth: 50,
minBrickHeight: 25
}) {}
generateBrickPattern(500,500,{maxBrickWidth: 75}) //Prefered
generateBrickPattern(500,500,{maxBrickWidth: 75,
maxBrickHeight: 50,
minBrickWidth: 50,
minBrickHeight: 25}) //Not wanted
首选语法给出以下错误。
Argument of type '{ maxBrickWidth: number; }' is not assignable to parameter of type '{ maxBrickWidth: number; maxBrickHeight: number; minBrickWidth: number; minBrickHeight: number; }...'.
您必须实际定义最后一个参数的类型,而不是让 TypeScript 推断它。
试试这个:
interface BrickPatternOptions {
maxBrickWidth?: number;
maxBrickHeight?: number;
minBrickWidth?: number;
minBrickHeight?: number;
}
function generateBrickPattern (
wallWidth: number,
wallHeight: number,
args: BrickPatternOptions = {
maxBrickWidth: 100,
maxBrickHeight: 50,
minBrickWidth: 50,
minBrickHeight: 25
}) {}
或者,如果您愿意,也可以将其内联:
function generateBrickPattern (
wallWidth: number,
wallHeight: number,
args: {
maxBrickWidth?: number,
maxBrickHeight?: number,
minBrickWidth?: number,
minBrickHeight?: number
} = {
maxBrickWidth: 100,
maxBrickHeight: 50,
minBrickWidth: 50,
minBrickHeight: 25
}) {}
您可以通过使用默认值解构 args
来做到这一点:
function generateBrickPattern (
wallWidth: number,
wallHeight: number,
{
maxBrickWidth: maxBrickWidth = 100,
maxBrickHeight: maxBrickHeight = 50,
minBrickWidth: minBrickWidth = 50,
minBrickHeight: minBrickHeight = 25
} = {}
) {
console.log(maxBrickWidth);
}
如果您不想解构,您可以将提供的 args
与默认值合并,如下所示:
interface BrickPatternOptions {
maxBrickWidth: number;
maxBrickHeight: number;
minBrickWidth: number;
minBrickHeight: number;
}
function generateBrickPattern (
wallWidth: number,
wallHeight: number,
args: Partial<BrickPatternOptions> = {}
) {
const options: BrickPatternOptions = {
maxBrickWidth: 100,
maxBrickHeight: 50,
minBrickWidth: 50,
minBrickHeight: 25,
...args
};
console.log(options.maxBrickWidth);
}