前端 TS 快速入门之二:接口

1. 接口有什么用

通过 interface 定义接口。

检测对象的属性,不会去检查属性的顺序,只要相应的属性存在并且类型也是对的就可以。

javascript 复制代码
interface IPerson {
  name: string;
  age: number;
}
function say(person: IPerson): void {
  console.log(`my name is ${person.name}, and age is ${person.age}`);
}
let me = {
  name: "funlee",
  age: 18,
};
say(me); // my name is funlee, and age is 18

2. 可选属性

属性后面加一个 ? 符号,表示该属性可选。

javascript 复制代码
interface IPerson {
  name: string;
  age: number;
  // love 可选
  love?: string;
}

3. 只读属性

属性名前加 readonly,表示该属性只读。

javascript 复制代码
interface IPerson {
  // name 只读
  readonly name: string;
  age: number;
  love?: string;
}
let me: IPerson = {
  name: "funlee",
  age: 18,
};
// name 不允许被赋值
me.name = "new name"; // error!

4. 函数接口

接口可以描述函数类型,它定义了函数的参数列表和返回值类型,参数列表里的每个参数都需要名字和类型,函数的参数名不需要与接口里定义的名字相匹配,只需要类型兼容就可以了。

javascript 复制代码
interface GetArea {
  (width: number, height: number): number;
}
let getArea: GetArea = function (w: number, h: number) {
  return w * h;
};
getArea(5, 6); // 30

5. 继承接口

一个接口可以继承多个接口,创建出多个接口的合成接口,如:

javascript 复制代码
interface Shape {
  color: string;
}
interface PenStroke {
  penWidth: number;
}
interface Square extends Shape, PenStroke {
  sideLength;
}
const square = <Square>{};
square.color = "blue";
square.sideLength = 10;
square.penWidth = 5.0;

6. 混合类型

让对象同时作为函数和对象使用,并带有额外的属性,如:

javascript 复制代码
interface MixedDemo {
  (str: string): void;
  defaultStr: string;
}

function foo(): MixedDemo {
  let x = <MixedDemo>function (str: string) {
    console.log(str);
  };
  x.defaultStr = "Hello, world";
  return x;
}

let c = foo();
c("This is a function"); // 'This is a function'
c.defaultStr; // 'Hello, world'
相关推荐
wangruofeng1 小时前
AI Models 1.1.0 发布,查大模型价格、对比模型和找 API 地址
前端·aigc·ai编程
wangruofeng1 小时前
给前端开发者的 100 个设计参考网站
前端·设计
M--Y3 小时前
LangGraph 工作流模式
开发语言·javascript·python·langchain·大模型·llm·langgraph
星栈4 小时前
视频即代码,Remotion 能做什么、不能做什么
前端·音视频开发
广州华水科技4 小时前
单北斗GNSS位移监测系统的应用与技术解析
前端
用户47949283569154 小时前
从一句话或代码仓到可交互 HTML:开源 Agent 画图技能 Archify v3.2 实测与选型边界
前端·后端·面试
风骏时光牛马7 小时前
生成一个AI多模态标题,仅输出一条标题,无额外文字、问句、备选、配图、文案等任何附加内容,不需要其他的任务服务 只要标题。
前端
wangruofeng7 小时前
从 GIF 到 AVIF:网页图片格式演进与 2026 年选型指南
前端·架构
清晨Coding8 小时前
为什么用 React Developer Tools 查看组件树这么乱?
前端·react.js
johnjincaaaa8 小时前
猿人学第 18 题「jsvmp 洞察先机」逆向通关实录
javascript·后端