TypeScript方法类型签名冗余

时间:2015-10-02 09:56:00

标签: methods lambda typescript signature tslint

也许我真的错过了一些东西,但我无法摆脱所有课程的语法问题。

以下是一个例子:

class Foo {
   bar: (x: string, y: number) => string = (xx: string, yy: number) : string => {
      // do some stuff...
   };
}

由于我使用tslint强制执行类型声明,所以我的所有方法都是这样编写的。这太糟糕了。必须复制粘贴参数部分,重命名类型声明和lambda声明之间的args名称是太麻烦了。

那么:有没有更好的方法来组合类型签名和lambda声明,而不是所有的膝盖抽搐?我真诚地希望我错过了一些东西,并希望这不是“按设计”! :)

2 个答案:

答案 0 :(得分:3)

您需要配置TSLint以强制执行类型,但忽略函数的类型:

  

typedef强制存在类型定义。规则选项:

     
      
  • “call-signature”检查函数的返回类型

  •   
  • “parameter”检查函数参数的类型说明符

  •   
  • “property-declaration”检查接口属性的返回类型

  •   
  • “variable-declaration”检查变量声明

  •   
  • “member-variable-declaration”检查成员变量声明

  •   

您可以使用this one之类的文件来配置TSLint。并阅读this以了解有关如何配置它的更多信息。

答案 1 :(得分:0)

编辑:

如果你的目标是ES5,你也可以这样做:

site/about

或者:

var bar = (x: string, y: number) : string => {
  // do some stuff...
};

class Foo {
   get bar () { return bar; }
}

var test = (new Foo).bar('hello', 3);

这样就保留了方法的上下文,它也存在于原型上。还没有必要复制参数类型,TSC会推断它们。