【问题标题】:Typedef in TypeScript error: 'expected variableDeclarator'TypeScript 错误中的 Typedef:“预期的 variableDeclarator”
【发布时间】:2014-12-26 14:13:09
【问题描述】:

在我的代码上运行 tslint 我得到这个错误:

expected variableDeclarator: 'getCode' to have a typedef.

对于 TypeScript 文件:

export var getCode = function (param: string): string {
    // ...
};

如何改进这一点,以便我看不到 tslint 错误?

【问题讨论】:

  • 您是否尝试向getCode 添加类型声明?我的意思是export var getCode : (param: string) => string = function (param: string): string { ... }
  • Kuba,这是正确的解决方案——至少让 tslint 开心。但是我认为在此之后代码不可读。如果您添加答案,我将接受它作为解决方案。
  • 在我变得有点聪明之后,我不得不撤回我对可读性的评论:-)
  • 好的,添加了答案。我不确定这是否是原因,因此我只是将其发布为评论:)

标签: typescript tslint


【解决方案1】:

您必须明确地向变量添加类型声明。

export var getCode : (param: string) => string = function (param: string): string { 
    //...
}

你说这看起来很难读。嗯,是的,匿名类型使 TS 代码看起来更糟,尤其是当它们很大时。在这种情况下,您可以声明一个可调用接口,如下所示:

export interface CodeGetter {
    (param: string): string;
}

export var getCode: CodeGetter = function(param: string): string { ... }

您可以检查 tslint 是否允许您(我现在无法检查)在使用接口时在函数定义中删除类型声明

export interface CodeGetter {
    (param: string): string;
}

export var getCode: CodeGetter = function(param) { ... }

【讨论】:

    【解决方案2】:

    在 getCode 中添加 typedef:

    var getCode: (s: string) => string;
    

    内联,应该是这样的:

    export var getCode: (s: string) => string = function (param) {
        // ...
    };
    

    【讨论】:

    • 我让 tslint 停止抱怨,并在您的建议中添加了一些内容。 export var getCode: (s: string) => string = function (param: string): string {//...} 这看起来真的很难看,不可读,如果这是答案,我更喜欢删除 tslint 检查。
    【解决方案3】:

    您的代码片段看起来不错。如果这个函数返回一个字符串,它会在 tsc 中编译而不会出错。你确定返回值是一个字符串吗?

    这段摘录来自 tslint 仓库:

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

    "callSignature" checks return type of functions
    "indexSignature" checks index type specifier of indexers
    "parameter" checks type specifier of parameters
    "propertySignature" checks return types of interface properties
    "variableDeclarator" checks variable declarations
    "memberVariableDeclarator" checks member variable declarations
    

    【讨论】:

      猜你喜欢
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 2016-06-19
      • 2016-10-28
      • 1970-01-01
      相关资源
      最近更新 更多