如何只将一些值传递给args对象?

时间:2018-01-09 13:32:06

标签: typescript object arguments intellisense args

有没有办法只将一个参数传入args并让其他值在TypeScript中默认?我不想要" args = {}"并且由于intellisense而声明函数内的默认值。

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

首选语法会出现以下错误。

  

类型的参数' {maxBrickWidth:number; }'不能转让给   参数类型' {maxBrickWidth:number; maxBrickHeight:number;   minBrickWidth:number; minBrickHeight:number; } ...'

2 个答案:

答案 0 :(得分:1)

您必须实际定义最后一个参数的类型,而不是让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
    }) {}

答案 1 :(得分:0)

您可以通过使用默认值解析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);
}