Pesquisa de site

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

Artigos relacionados