Methods 类型脚本方法类型签名冗余

Methods 类型脚本方法类型签名冗余,methods,lambda,typescript,signature,tslint,Methods,Lambda,Typescript,Signature,Tslint,也许我真的错过了一些东西,但我无法摆脱我所有类的语法问题 以下是一个例子: class Foo { bar: (x: string, y: number) => string = (xx: string, yy: number) : string => { // do some stuff... }; } 因为我使用tslint强制类型声明,所以我所有的方法都是这样编写的。太可怕了。必须复制粘贴参数部分,在类型声明和lambda声明之间重命名args名称是非

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

以下是一个例子:

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

因为我使用tslint强制类型声明,所以我所有的方法都是这样编写的。太可怕了。必须复制粘贴参数部分,在类型声明和lambda声明之间重命名args名称是非常痛苦的

那么:有没有更好的方法将类型签名和lambda声明结合起来,而不需要所有的下意识呢?我真诚地希望我错过了什么,希望这不是“故意的”!:)

编辑:

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

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

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

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


通过这种方式,方法的上下文被保留,并且它也存在于原型上。也不需要复制参数类型,TSC将推断它们。

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

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

  • “调用签名”检查函数的返回类型

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

  • “属性声明”检查接口属性的返回类型

  • “变量声明”检查变量声明

  • “成员变量声明”检查成员变量声明


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

因此编写
var bar=(x:string,y:number):string=>{/*dostuff*/}无效?这是错误的:您不能用关键字“var”声明方法。对不起,如果没有
var
,会不会导致tslint抱怨?“因为我使用tslint强制执行类型声明”。。。这就像抱怨你的闹钟一直在凌晨4点叫醒你。如果你不喜欢那样,那就不要再设置了!不建议这样明确地声明所有类型。您可以关闭“implicit any”,这将确保可以推断出非any类型。多次出现有关“this”上下文的问题。所以我切换到lambda赋值。这些问题是什么?和OK一样,Knockout杀死了另一个更新的答案(15个字符),我们用于TSLint本身的配置。这是相当合理的,但我要说的是,在调整它时不要犹豫。例如,我更喜欢单引号而不是双引号。
class Foo {
   get bar () {
       return (xx: string, yy: number): string => {
            // do some stuff... 
       };
    }
}