มาตรฐานการตั้งชื่อสำหรับอินเทอร์เฟซและคลาสใน 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.)
ดังนั้นวิธีการตั้งชื่อที่คุณเลือกใช้กับอินเทอร์เฟซก็ขึ้นอยู่กับดุลยพินิจของคุณเองในที่สุด
