Care este convenția de denumire pentru interfețe și clase în TypeScript?
Am următoarele:
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')
}
Trebuie să pun litera „I” înaintea numelui interfeței, este corect sau ar trebui să procedez diferit?
Răspuns #1
Cineva a dezvoltat un ghid de stil TypeScript. Îl poți găsi aici: https://ts.dev/style
Din acel ghid:
Acesta este ghidul de stil pentru limbajul TypeScript, care a fost bazat pe cel furnizat de Google. Conține atât reguli, cât și practici recomandate. Alegeți pe cele care funcționează cel mai bine pentru echipa voastră.
Asta este ceea ce spune despre denumirea interfeței:
Nu marcați interfețele în mod special (
IMyInterfacesauMyFooInterface) decât dacă este idiomatic în mediul său. Când introduceți o interfață pentru o clasă, dați-i un nume care să exprime de ce există interfața în primul rând (de exemplu, clasa TodoItem și interfața TodoItemStorage dacă interfața exprimă formatul folosit pentru stocare/serializare în JSON).
Răspunsul #2
Nu există o convenție oficială de denumire, deși este comun în comunitatea mai largă TypeScript să nu se folosească I pentru interfețe decât dacă sunt explicit destinate a fi implementate de clase, cum ar fi:
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;
}
}
(Model adaptat după sveltekit-starter de Navneet Sharma.)
Deci, metoda de denumire pe care o alegeți pentru interfețe este, în final, la discreția dumneavoastră.
