Typedef в ошибке TypeScript: «ожидаемая переменнаяDeclarator»

Запустив tslint в моем коде, я получаю эту ошибку:

expected variableDeclarator: 'getCode' to have a typedef.

для файла TypeScript:

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

Как мне улучшить это, чтобы я не видел ошибку tslint?


person homaxto    schedule 30.10.2014    source источник
comment
Вы пытались добавить объявление типа в getCode? Я имею в виду export var getCode : (param: string) => string = function (param: string): string { ... }   -  person Kuba Jagoda    schedule 30.10.2014
comment
Куба, это правильное решение - по крайней мере, для того, чтобы осчастливить tslint. Однако я не думаю, что после этого код читается. Если вы добавите ответ, я приму его как решение.   -  person homaxto    schedule 31.10.2014
comment
Думаю, мне придется отозвать свой комментарий о читабельности после того, как я стал немного мудрее :-)   -  person homaxto    schedule 31.10.2014
comment
Хорошо, добавил ответ. Я не был уверен, было ли это причиной, поэтому просто разместил это как комментарий :)   -  person Kuba Jagoda    schedule 31.10.2014


Ответы (3)


Вы должны явно добавить объявление типа к вашей переменной.

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) { ... }
person Kuba Jagoda    schedule 31.10.2014

Ваш фрагмент кода выглядит нормально. Если эта функция предназначена для возврата строки, она компилируется в 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
person donnut    schedule 30.10.2014

Добавьте typedef в getCode:

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

В инлайне это должно выглядеть так:

export var getCode: (s: string) => string = function (param) {
    // ...
};
person dug    schedule 30.10.2014
comment
Я заставил tslint перестать жаловаться, добавив несколько дополнений к вашему предложению. export var getCode: (s: string) => string = function (param: string): string {//...} Это выглядит очень уродливо и нечитаемо, и если это ответ, я предпочитаю удалить эту проверку tslint. - person homaxto; 31.10.2014