MST
星途 面试题库

面试题:TypeScript中对象类型与接口定义的基础差异

请阐述在TypeScript里,对象类型字面量和接口定义在语法、功能及使用场景上有哪些主要区别,并各举一个简单示例说明。
48.1万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

语法区别

  • 对象类型字面量:使用大括号 {} 直接定义,可在变量声明时同时定义类型。例如:
let person: { name: string; age: number } = { name: 'John', age: 30 };
  • 接口定义:使用 interface 关键字,以一种独立的、具名的方式定义类型。例如:
interface Person {
  name: string;
  age: number;
}
let person: Person = { name: 'John', age: 30 };

功能区别

  • 对象类型字面量:一般用于一次性的、简单的类型定义,不具备可复用性,在类型合并方面不如接口灵活。比如在函数参数中直接定义:
function greet(person: { name: string; age: number }) {
  console.log(`Hello, ${person.name}, you are ${person.age} years old.`);
}
greet({ name: 'Jane', age: 25 });
  • 接口定义:更强调可复用性,可通过继承(extends)来扩展其他接口,且在类型合并时会自动合并同名接口的成员。例如:
interface Animal {
  name: string;
}
interface Dog extends Animal {
  breed: string;
}
let myDog: Dog = { name: 'Buddy', breed: 'Golden Retriever' };

使用场景区别

  • 对象类型字面量:适用于简单、临时的类型声明,像函数内部的局部变量类型定义,或者只在一处使用的复杂类型。例如:
function processData(data: { value: number; label: string }) {
  console.log(`Processing ${data.label} with value ${data.value}`);
}
processData({ value: 42, label: 'Answer' });
  • 接口定义:适合需要复用的类型,如模块间共享的对象类型,或者在多个地方用到的复杂数据结构。例如,在一个库中定义通用的数据结构供外部调用:
interface User {
  id: number;
  username: string;
}
function getUserById(id: number): User {
  // 模拟从数据库获取用户数据
  return { id, username: 'defaultUser' };
}