Pesquisa de site

Qual é a convenção de nomenclatura para interfaces e classes no TypeScript?


Eu tenho o seguinte:

interface IUser {
  email: string
  password: string
}

class User {
  email: string
  password: string
  constructor(email: string, password: string) {
    this.email = email
    this.password = password
  }

  isEmailValid(): boolean {
    return validatorJs.isEmail(this.email)
  }

  isPasswordValid(): boolean {
    return validatorJs.isStrongPassword(this.password, opts)
  }
}

function createUser(user: IUser) {
  // applying isPasswordValid and isEmailValid
  //insert ...
}

function getUser(): IUser {
  return new User('[email ', 'foobar')
}

Eu tenho que colocar a letra "I" antes do nome da interface, isso está correto ou devo fazer de maneira diferente?

Resposta #1

Alguém desenvolveu um guia de estilo para TypeScript. Você pode encontrá-lo aqui: https://ts.dev/style

Do guia:

Este é o guia de estilo para a linguagem TypeScript que foi baseado no fornecido pelo Google. Ele contém tanto regras quanto melhores práticas. Escolha aquelas que funcionam melhor para sua equipe.

Isto é o que diz sobre a nomenclatura de interfaces:

Não marque interfaces de forma especial ( IMyInterface ou MyFooInterface) a menos que seja idiomático em seu ambiente. Ao introduzir uma interface para uma classe, dê a ela um nome que expresse o motivo pelo qual a interface existe em primeiro lugar (por exemplo, classe TodoItem e interface TodoItemStorage se a interface expressa o formato usado para armazenamento/serialização em JSON).

Resposta #2

Não há uma convenção oficial de nomenclatura, embora seja comum na comunidade mais ampla de TS não usar I para interfaces, a menos que elas sejam explicitamente para serem implementadas por classes, como:

import type { IUser } from '$models/interfaces/iuser.interface';
import type { IDeserializable } from '$models/interfaces/ideserializable.interface';

export class UserModel implements IDeserializable<IUser>, IUser {
  public email: string;
  public password: string;

  deserialize(input: IUser): this {
    Object.assign(this, input);
    return this;
  }
}

(Padrão adaptado do sveltekit-starter por Navneet Sharma.)

Então, qual método de nomenclatura você escolher para interfaces é, em última análise, por sua própria discrição.

Artigos relacionados