TypeScript入门:三分钟学会可索引类型

哈喽,大家好!我是前端理想哥

今天是咱们 TS 学习第三课 ,前两节没听懂的同学别急,今天咱继续冲,这节课我们要聊的内容非常重要:可索引的类型接口继承混合类型 ,还有接口继承类

听着有点复杂对吧?没关系!理想哥保证,这节课看完,脑袋里就只剩一个感觉: "原来这么简单!"

一、可索引的类型

先来讲可索引的类型

什么叫可索引?其实很简单,就是可以用"索引"来访问属性的类型。你肯定用过数组 arr[10],或者对象 person["age"],这些操作在 TS 里直接靠 可索引的类型搞定。

来看个简单的例子:

ini 复制代码
interface StringArray {
  [index: number]: string;
}

const myArray: StringArray = ["Bob", "Fred"];
console.log(myArray[0]); // 输出: Bob

这段代码中,我们定义了一个 StringArray 接口,它允许用 数字类型的索引 来取值,比如 myArray[0],就返回 "Bob"。简单吧!

不止数字,还可以用字符串当索引:

typescript 复制代码
interface StringIndexedObject {
  [key: string]: string; // 键是字符串,值也必须是字符串
}

const example: StringIndexedObject = {
  name: "Andy",
  role: "Front-end Developer",
  location: "Shanghai",
};

console.log(example.name); // 输出: Andy
example["company"] = "Alibaba"; // 添加一个新属性
console.log(example.company); // 输出: Alibaba

不过,这里要注意,如果你试图写个 example.age = 25,TypeScript 会立刻跟你说 "No!" ,因为 25 不是字符串。TS还是很严谨的

二、接口继承

接下来聊聊接口继承,这玩意儿专治代码看着"乱糟糟"的毛病。

你可以通过接口继承,把多个接口的属性和方法组合起来,既清晰又复用。来看个例子:

typescript 复制代码
interface Parent {
  property1: string;
}

interface Child extends Parent {
  property2: number;
}

这里 Child 继承了 Parent,所以 Child 既有 property1,又有 property2,两全其美!

更骚的是,接口还可以继承多个接口,比如:

kotlin 复制代码
interface Fly {
  fly(): void;
}

interface Swim {
  swim(): void;
}

interface SuperHero extends Fly, Swim {
  name: string;
}

这个意思就是:SuperHero 同时拥有Fly和Swim两个接口,妥妥的多功能选手!大家可以自己脑补下超级英雄"超人"或者"海王"的形象。

三、混合类型

讲完接口继承,我们来看看混合类型

这东西用起来就一个字:妙!

你有没有想过,一个对象,既有属性,又能像函数一样调用?没错,这就是混合类型的绝活!

混合类型是 TypeScript 中的一种特殊类型,它允许我们创建一个对象,既有属性,也有方法,甚至可以像函数一样被调用。换句话说,混合类型可以同时表现为"对象"和"函数"的结合体。

typescript 复制代码
interface Counter {
  count: number; // 属性
  increment(): void; // 方法
  reset(): void; // 方法
}

const counter: Counter = {
  count: 0,
  increment() {
    this.count++;
  },
  reset() {
    this.count = 0;
  },
};

counter.increment();
console.log(counter.count); // 输出: 1
counter.reset();
console.log(counter.count); // 输出: 0

在这个例子中,我们定义了一个Counter接口,该接口中有三个属性,number类型的count,void类型的increment函数,void类型的reset函数。

然后counter这个函数,就会有拥有多种类型了。

这个例子就是一个计数器,属性 count 存当前值,方法 increment 是增加计数,reset 是清零。简单直接,还特别实用!

四、接口继承类

最后一个知识点,接口继承类。有点高阶,但其实也不难。

简单来说,接口不仅可以继承接口,还可以继承类。什么意思呢?来看代码:

typescript 复制代码
class Base {
  baseProperty: string = "Base Property";
}

interface Derived extends Base {
  derivedProperty: string;
}

const obj: Derived = {
  baseProperty: "From Base",
  derivedProperty: "From Derived",
};

console.log(obj);

这里 Derived 继承了类 Base 的属性,继承完还能再加自己的新属性,是不是有点儿像接口的"外挂功能"?

好了,这就是我们今天讲的所有内容!

这节课聊了四个 TypeScript 的重点概念:可索引的类型、接口继承、混合类型和接口继承类。

最后提醒一下:点赞、关注、收藏,走一波! 下节课我们讲 TypeScript 的"王炸"功能------类,记得来听!我们下期见,拜拜~

相关推荐
jacGJ18 小时前
记录学习--文件读写
java·前端·学习
毕设源码-赖学姐18 小时前
【开题答辩全过程】以 基于WEB的实验室开放式管理系统的设计与实现为例,包含答辩的问题和答案
前端
幻云201018 小时前
Python深度学习:从筑基到登仙
前端·javascript·vue.js·人工智能·python
我即将远走丶或许也能高飞20 小时前
vuex 和 pinia 的学习使用
开发语言·前端·javascript
钟离墨笺20 小时前
Go语言--2go基础-->基本数据类型
开发语言·前端·后端·golang
爱吃泡芙的小白白20 小时前
Vue 3 核心原理与实战:从响应式到企业级应用
前端·javascript·vue.js
卓怡学长21 小时前
m115乐购游戏商城系统
java·前端·数据库·spring boot·spring·游戏
老陈聊架构21 小时前
『AI辅助Skill』掌握三大AI设计Skill:前端独立完成产品设计全流程
前端·人工智能·claude·skill
Ulyanov1 天前
从桌面到云端:构建Web三维战场指挥系统
开发语言·前端·python·tkinter·pyvista·gui开发
cypking1 天前
二、前端Java后端对比指南
java·开发语言·前端