Open chunhuile opened 2 months ago
以下是它们的主要区别:
interface A { name: string; }
interface B extends A { age: number; }
const person: B = { name: 'Alice', age: 30 };
type:可以通过交叉类型(&)来组合多个类型,从而实现类似继承的效果。 t``` ype A = { name: string; }; type B = A & { age: number; }; const person: B = { name: 'Alice', age: 30 };
interface A { age: number; }
const person: A = { name: 'Alice', age: 30 }; // 合并后包含 name 和 age
**type:**不能进行多次声明或合并,重复声明会导致错误。
type A = { name: string; };
// Error: Duplicate identifier 'A'. type A = { age: number; };
**4. 使用场景** interface:更适合用于描述对象的形状,特别是类的设计,或者需要支持声明合并的场景。 type:适合用于定义复杂的联合类型、交叉类型,或者无法通过接口定义的类型(如函数签名、联合类型等)。 **5. 与联合类型、交叉类型的兼容性** interface:不能用于定义联合类型或交叉类型。
// Error: An interface can only extend an object type or intersection of object types with statically known members. interface C extends A | B {}
type:可以用于定义联合类型和交叉类型。
type C = A | B; // 联合类型 **type D = A & B; // 交叉类型
6. 与类的兼容性** interface:可以被类实现(implements),用于强制类遵循某种结构。
interface Person { name: string; greet(): void; }
class Student implements Person { name: string; greet() { console.log("Hello"); } }
type:不能直接用于类的 implements,因为它更像是别名,而不是约束。 **7. 区别总结** interface 更加倾向于描述对象和类的结构,并支持声明合并和继承,适合用来定义公共接口或类的设计。 type 更加灵活,可以表示任意类型,适合用来定义联合类型、交叉类型、复杂的类型组合。 一般来说,当你需要描述对象的结构或者为类定义接口时,使用 interface;当你需要更灵活的类型定义时,使用 type。
以下是它们的主要区别:
interface B extends A { age: number; }
const person: B = { name: 'Alice', age: 30 };
interface A { age: number; }
const person: A = { name: 'Alice', age: 30 }; // 合并后包含 name 和 age
type A = { name: string; };
// Error: Duplicate identifier 'A'. type A = { age: number; };
// Error: An interface can only extend an object type or intersection of object types with statically known members. interface C extends A | B {}
type C = A | B; // 联合类型 **type D = A & B; // 交叉类型
interface Person { name: string; greet(): void; }
class Student implements Person { name: string; greet() { console.log("Hello"); } }