最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

TypeScript中索引簽名的實(shí)現(xiàn)示例

 更新時(shí)間:2026年01月15日 10:51:22   作者:新節(jié)  
索引簽名在TypeScript中用于定義具有動(dòng)態(tài)屬性名的對(duì)象,它允許使用字符串或數(shù)字作為鍵,并可以限制鍵和值的類型,下面就來(lái)詳細(xì)的介紹一下TypeScript中索引簽名,感興趣的可以了解一下

1. 基本語(yǔ)法

索引簽名的基本語(yǔ)法如下:

interface SomeObject {
  [key: string]: string;
}

在上面的例子中,[key: string] 表示這個(gè)對(duì)象可以有任意數(shù)量的字符串類型的鍵,而每個(gè)鍵對(duì)應(yīng)的值都是 string 類型。

在使用apiFox對(duì)接接口時(shí),經(jīng)常會(huì)自動(dòng)生成類型:如圖

項(xiàng)目中的一些場(chǎng)景:

2. 使用索引簽名

2.1 定義一個(gè)對(duì)象類型,允許使用字符串鍵名

interface Dictionary {
  [key: string]: number;
}

const dict: Dictionary = {
  age: 30,
  height: 175
};

console.log(dict["age"]); // 輸出: 30
console.log(dict["height"]); // 輸出: 175

在這個(gè)例子中,Dictionary 類型允許我們使用任意的字符串作為鍵,并且每個(gè)鍵對(duì)應(yīng)的值都是 number 類型。

2.2 字符串或數(shù)字作為索引類型

你可以指定索引的鍵可以是 字符串數(shù)字,但你不能同時(shí)指定這兩種類型。如果你同時(shí)使用字符串和數(shù)字,TypeScript 會(huì)做一定的類型推導(dǎo)。

interface MixedDictionary {
  [key: string]: number;
  [index: number]: number; // 字符串索引與數(shù)字索引共享相同的值類型
}

const dict: MixedDictionary = {
  age: 25,
  100: 500,
  height: 175
};

console.log(dict["age"]); // 輸出: 25
console.log(dict[100]); // 輸出: 500

3. 限制鍵的類型

你可以使用 字面量類型 限制對(duì)象的索引簽名的鍵類型。例如,限制對(duì)象的鍵為 'a'、'b''c'

interface MyObject {
  [key: "a" | "b" | "c"]: number;
}

const obj: MyObject = {
  a: 1,
  b: 2,
  c: 3
};

console.log(obj.a); // 輸出: 1

在這個(gè)例子中,MyObject 只允許 a、bc 作為鍵。鍵名之外的任何值都會(huì)導(dǎo)致編譯錯(cuò)誤。

4. 只讀索引簽名

有時(shí)你可能希望對(duì)象的鍵是不可變的,可以使用 readonly 來(lái)限制對(duì)象的屬性是只讀的。這對(duì)確保數(shù)據(jù)的不可變性非常有用。

interface ReadOnlyDict {
  readonly [key: string]: number;
}

const readOnlyDict: ReadOnlyDict = {
  age: 30,
  height: 175
};

console.log(readOnlyDict["age"]); // 輸出: 30
// readOnlyDict["age"] = 35;  // Error: Cannot assign to 'age' because it is a read-only property.

在這個(gè)例子中,readOnlyDict 的屬性值是只讀的,意味著你不能更改這些值。

5. 使用類與索引簽名

索引簽名不僅適用于接口,還可以應(yīng)用于類。當(dāng)類具有索引簽名時(shí),類的實(shí)例可以使用任意的字符串作為鍵。

class MyClass {
  [key: string]: string;

  constructor() {
    this["name"] = "John";
  }
}

const obj = new MyClass();
obj["age"] = "30"; // 可以動(dòng)態(tài)添加新的屬性
console.log(obj.name); // 輸出: John
console.log(obj.age); // 輸出: 30

在這個(gè)例子中,MyClass 類允許通過(guò)字符串鍵訪問(wèn)和修改屬性。

6. 限制索引簽名值的類型

你可以使用聯(lián)合類型來(lái)限制索引簽名的值類型。例如:

interface EventDetails {
  [key: string]: "start" | "end"; // 值只能是 "start" 或 "end"
}

const event: EventDetails = {
  event1: "start",
  event2: "end"
};

console.log(event["event1"]); // 輸出: start

在這個(gè)例子中,EventDetails 類型的所有值只能是 "start""end"。

7. 結(jié)合其他類型使用索引簽名

索引簽名也可以與其他類型結(jié)合使用,提供更加靈活的類型設(shè)計(jì)。例如,在組合不同接口時(shí),你可能會(huì)同時(shí)使用索引簽名和其他屬性。

interface Car {
  make: string;
  model: string;
  [key: string]: string | number; // 支持字符串或數(shù)字類型的任意額外屬性
}

const car: Car = {
  make: "Toyota",
  model: "Corolla",
  year: 2020, // 額外的屬性
  color: "Red"
};

console.log(car);

在這個(gè)例子中,Car 類型具有 makemodel 兩個(gè)具體屬性,并且可以通過(guò)索引簽名動(dòng)態(tài)添加其他的字符串或數(shù)字類型的屬性。

8. 動(dòng)態(tài)屬性和字面量類型

通過(guò)使用索引簽名,你可以讓對(duì)象的鍵動(dòng)態(tài)地決定類型,并在開發(fā)中提高靈活性。

type DynamicProperties = {
  [key: string]: string;
};

const dynamicObject: DynamicProperties = {
  name: "Alice",
  age: "25",
  occupation: "Engineer"
};

console.log(dynamicObject);

9. 類型推導(dǎo)與索引簽名

TypeScript 會(huì)根據(jù)你為索引簽名指定的類型自動(dòng)推導(dǎo)出對(duì)象的屬性類型。例如:

interface DynamicObject {
  [key: string]: string | number;
}

const obj: DynamicObject = {
  name: "Alice",
  age: 30
};

console.log(obj["name"]); // 輸出: Alice
console.log(obj["age"]); // 輸出: 30

10. 使用索引簽名進(jìn)行合并

索引簽名也可以與其他對(duì)象類型合并,通過(guò) & 進(jìn)行交叉組合。比如:

interface Name {
  name: string;
}

interface Address {
  address: string;
}

type Person = Name &
  Address & {
    [key: string]: string; // 任意的額外屬性
  };

const person: Person = {
  name: "John",
  address: "123 Main St",
  phone: "123-456-7890"
};

console.log(person);

11. 小結(jié)

  • 索引簽名(Index Signatures) 用于定義允許具有動(dòng)態(tài)屬性名的對(duì)象。
  • 使用 key: stringkey: number 作為鍵類型來(lái)表示對(duì)象的屬性鍵。
  • 可以結(jié)合其他類型使用索引簽名,靈活地定義對(duì)象結(jié)構(gòu)。
  • 通過(guò) readonly 限制對(duì)象的鍵為只讀。
  • 索引簽名與類:類的實(shí)例也可以使用索引簽名來(lái)動(dòng)態(tài)訪問(wèn)和修改屬性。
  • 索引簽名與聯(lián)合類型:可以為索引簽名指定值的類型限制。

到此這篇關(guān)于TypeScript中索引簽名的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)TypeScript 索引簽名內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入淺出使用JS/TS輕松搞定Excel與XML互轉(zhuǎn)

    深入淺出使用JS/TS輕松搞定Excel與XML互轉(zhuǎn)

    在一些場(chǎng)景下,程序化的Excel與XML轉(zhuǎn)換能力就顯得尤為重要,這篇文章主要為大家詳細(xì)介紹了如何使用JS/TS輕松搞定Excel與XML互轉(zhuǎn),感興趣的小伙伴可以了解下
    2025-07-07
  • 詳解js的六大數(shù)據(jù)類型

    詳解js的六大數(shù)據(jù)類型

    js中有六種數(shù)據(jù)類型,包括五種基本數(shù)據(jù)類型(Number,String,Boolean,Null,Undefined),和一種混合數(shù)據(jù)類型(Object)。下面就跟著小編一起來(lái)看下吧
    2016-12-12
  • js實(shí)現(xiàn)從右往左勻速顯示圖片(無(wú)縫輪播)

    js實(shí)現(xiàn)從右往左勻速顯示圖片(無(wú)縫輪播)

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)從右往左勻速顯示圖片,無(wú)縫輪播,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • js中apply和Math.max()函數(shù)的問(wèn)題及區(qū)別介紹

    js中apply和Math.max()函數(shù)的問(wèn)題及區(qū)別介紹

    這篇文章主要介紹了js中apply和Math.max()函數(shù)的問(wèn)題,本文給大家?guī)?lái)兩種答案,每一種答案給大家介紹的非常詳細(xì),在文章底部給大家提到了js中Math.max.apply和Math.max的區(qū)別,感興趣的朋友一起看看吧
    2018-03-03
  • 用原生JS對(duì)AJAX做簡(jiǎn)單封裝的實(shí)例代碼

    用原生JS對(duì)AJAX做簡(jiǎn)單封裝的實(shí)例代碼

    下面小編就為大家?guī)?lái)一篇用原生JS對(duì)AJAX做簡(jiǎn)單封裝的實(shí)例代碼。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-07-07
  • 淺析document.createDocumentFragment()與js效率

    淺析document.createDocumentFragment()與js效率

    對(duì)于循環(huán)批量操作頁(yè)面的DOM有很大幫助!利用文檔碎片處理,然后一次性append,并且使用原生的javascript語(yǔ)句操作
    2013-07-07
  • js實(shí)現(xiàn)簡(jiǎn)易計(jì)算器功能

    js實(shí)現(xiàn)簡(jiǎn)易計(jì)算器功能

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)簡(jiǎn)易計(jì)算器功能,制作能進(jìn)行加減乘除的計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • JS動(dòng)態(tài)計(jì)算移動(dòng)端rem的解決方案

    JS動(dòng)態(tài)計(jì)算移動(dòng)端rem的解決方案

    移動(dòng)設(shè)備分辨率五花八門雖然我們可以通過(guò)CSS3的media query來(lái)實(shí)現(xiàn)適配,但是這種做法并不能適配所有設(shè)備,這篇文章主要介紹了js動(dòng)態(tài)計(jì)算移動(dòng)端rem的解決方案,非常不錯(cuò),感興趣的朋友一起看看吧
    2016-10-10
  • 詳解用Webpack與Babel配置ES6開發(fā)環(huán)境

    詳解用Webpack與Babel配置ES6開發(fā)環(huán)境

    這篇文章主要介紹了詳解用Webpack與Babel配置ES6開發(fā)環(huán)境,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 前端實(shí)現(xiàn)pdf文件預(yù)覽的操作步驟方法

    前端實(shí)現(xiàn)pdf文件預(yù)覽的操作步驟方法

    這篇文章主要介紹了前端實(shí)現(xiàn)pdf文件預(yù)覽的操作步驟方法,前端實(shí)現(xiàn)PDF文件流預(yù)覽可以使用多種方法,其中一種常用的方法是使用PDF.js庫(kù),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-07-07

最新評(píng)論

江口县| 嘉兴市| 开阳县| 交口县| 沙洋县| 邵阳县| 西安市| 谢通门县| 南平市| 康平县| 米易县| 桦甸市| 文山县| 吴忠市| 江山市| 鹤岗市| 西充县| 新乡市| 社旗县| 边坝县| 永宁县| 肥西县| 巴里| 沙雅县| 沈阳市| 天津市| 博野县| 中方县| 青浦区| 浮山县| 日照市| 白沙| 楚雄市| 横峰县| 雷州市| 壶关县| 张掖市| 临朐县| 普宁市| 尚义县| 凉城县|