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 (
IMyInterfaceouMyFooInterface) 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.
