ค้นหาเว็บไซต์

มาตรฐานการตั้งชื่อสำหรับอินเทอร์เฟซและคลาสใน 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('[email ', 'foobar')
}

ฉันต้องใส่อักษร 'I' ไว้หน้าชื่ออินเทอร์เฟซ ใช่ไหม หรือว่าควรทำแบบอื่น?

คำตอบ #1

มีคนพัฒนาแนวทางการเขียนสไตล์ TypeScript คุณสามารถดูได้ที่นี่: https://ts.dev/style

จากคู่มือนั้น:

นี่คือคู่มือสไตล์สำหรับภาษา TypeScript ซึ่งสร้างขึ้นจากคู่มือที่ Google จัดเตรียมไว้ มันมีทั้งกฎเกณฑ์และแนวทางปฏิบัติที่ดีที่สุด เลือกสิ่งที่เหมาะสมที่สุดสำหรับทีมของคุณ

นี่คือสิ่งที่กล่าวเกี่ยวกับการตั้งชื่ออินเทอร์เฟซ:

อย่าใส่เครื่องหมายพิเศษกับอินเทอร์เฟซ ( IMyInterface หรือ MyFooInterface ) เว้นแต่ว่าจะเป็นแนวปฏิบัติในสภาพแวดล้อมนั้น ๆ เมื่อสร้างอินเทอร์เฟซสำหรับคลาส ให้ตั้งชื่อที่แสดงว่าทำไมถึงมีอินเทอร์เฟซนั้นตั้งแต่แรก (เช่น คลาส TodoItem และอินเทอร์เฟซ TodoItemStorage หากอินเทอร์เฟซแสดงรูปแบบที่ใช้สำหรับการจัดเก็บ/การแปลงข้อมูลเป็น JSON)

คำตอบ #2

ไม่มีรูปแบบการตั้งชื่ออย่างเป็นทางการแม้ว่าจะเป็นเรื่องปกติในชุมชน 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;
  }
}

(แพทเทิร์นปรับปรุงจาก sveltekit-starter โดย Navneet Sharma.)

ดังนั้นวิธีการตั้งชื่อที่คุณเลือกใช้กับอินเทอร์เฟซก็ขึ้นอยู่กับดุลยพินิจของคุณเองในที่สุด

บทความที่เกี่ยวข้อง