1

也许我严重遗漏了一些东西,但我无法摆脱我所有课程的语法问题。

这是一个例子:

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

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

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

4

2 回答 2

3

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

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

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

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

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

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

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

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

于 2015-10-02T12:28:12.827 回答
0

编辑:

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

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

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

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

或者:

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

这样,方法的上下文就被保留了,并且它也存在于原型中。也不需要复制参数类型,TSC 会推断它们。

于 2015-10-02T12:24:21.470 回答