typescript - TS2683 (TS) 'this' tem implicitamente o tipo 'any' porque não possui uma anotação de tipo
Estou enfrentando esse problema com um arquivo TypeScript e gostaria de saber como resolver isso.
Por enquanto, eu suprimí essa exceção do TypeScript, mas gostaria de aprender como resolvê-la. O seguinte é o meu código:
export class BaseResult {
isSuccessful: boolean;
totalRecords: number;
successMessage: string;
reasonForFailure: string;
lastExecutedDateTime: Date;
}
export class Result<T> extends BaseResult {
data: T;
}
export class CollectionResult<T> extends BaseResult {
data: T[];
}
export class PagedCollectionResult<T> extends CollectionResult<T> {
pageNumber: number;
pageSize: number;
filter: string;
pages = function () {
return (this.totalRecords <= 0 || this.pageSize <= 0) ? 0 : Math.ceil(this.totalRecords / this.pageSize);//<--All the **this** keyword shows the error
}
}
Resposta #1
Como alguns dos comentários indicaram, sua referência this não tem tipo porque você está usando a sintaxe function() {} para definir sua função. O objeto this dentro de tal função será inerentemente do tipo any, porque this será o chamador da função (desconhecível em tempo de design).
Se você mudar sua sintaxe para uma função de seta, como
pages = () => {
ou simplesmente omitir a palavra-chave function e a seta completamente, como
pages() {
então o objeto this dentro da função fará referência à instância da classe this em vez do tipo any.
Consulte o manual do TypeScript para mais explicações.
Resposta #2
Use a anotação explícita this:
pages = function(this: BaseResult) {
Neste contexto, this não é um argumento da função, mas o local real para declarar o tipo de this, veja o manual:
A especificação do JavaScript afirma que você não pode ter um parâmetro chamado this, e portanto o TypeScript usa esse espaço de sintaxe para permitir que você declare o tipo de this no corpo da função.
https://www.typescriptlang.org/docs/handbook/2/functions.html#declaring-this-in-a-function
