TypeScript 中接口和类的命名约定是什么?

Die*_*ola 32 typescript

我有以下内容:

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('foo@bar.com', 'foobar')
}
Run Code Online (Sandbox Code Playgroud)

我必须在接口名称前加上字母“I”,这是正确的还是我应该采取不同的做法?

Deb*_*ahK 20

有人开发了 TypeScript 风格指南。您可以在这里找到它: https: //ts.dev/style

从该指南:

这是 TypeScript 语言的风格指南,基于 Google 提供的语言。它包含规则和最佳实践。选择最适合您团队的方法。

这是关于接口命名的内容:

不要专门标记接口(IMyInterfaceMyFooInterface),除非它在其环境中是惯用的。为类引入接口时,首先为其指定一个名称,以表达该接口存在的原因(例如,如果接口表示用于 JSON 中存储/序列化的格式,则为类 TodoItem 和接口 TodoItemStorage)。


Rya*_*ugh 18

尽管在更广泛的 TS 社区中通常不使用接口,但没有正式的命名约定I,除非它们明确由类实现,例如:

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;
  }
}
Run Code Online (Sandbox Code Playgroud)

(模式改编自Navneet Sharma 的sveltekit-starter。)

因此,您为接口选择哪种命名方法最终取决于您自己的决定。