TypeScript 第十节:对象

2023-12-13 19:22:51

?一、对象

TypeScript 中的对象可以包含属性和方法。对象的属性可以是简单值、对象、数组或函数。对象可以使用类或接口进行定义。

1、示例

以下是一个简单的 TypeScript 对象示例:

let person = {
  name: "John",
  age: 30,
  hobbies: ["reading", "hiking"],
  address: {
    street: "123 Main St",
    city: "Anytown",
    state: "CA"
  },
  sayHello: function() {
    console.log("Hello, my name is " + this.name + "!");
  }
};

在此示例中,person 对象包含了 nameagehobbiesaddresssayHello 属性。其中,nameage 是简单值,hobbies 是一个字符串数组,address 是一个嵌套的对象,sayHello 是一个函数。

?

可以使用如下方式访问对象属性和方法:

console.log(person.name); // 输出:John
person.sayHello(); // 输出:Hello, my name is John!

要在对象中添加方法,可以通过以下方式

person.sayHi = function () {
    console.log("Hi, my name is " + person.name + "!");
};

person.sayHi();  // 输出:Hi, my name is John!

?

?2、鸭子类型 (Duck Typing)

鸭子类型(英语:duck typing)是动态类型的一种风格,是多态(polymorphism)的一种形式。

在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由"当前方法和属性的集合"决定。

TypeScript 是一种静态类型语言,但它也支持鸭子类型。

鸭子类型是指,如果一只鸟走起来像鸭子,叫起来像鸭子,那么它就可以被视为一只鸭子。

在 TypeScript 中,如果两个类型具有相同的属性和方法,那么它们就可以视为同一种类型。

?

例如,假设我们有两个接口:

interface Duck {
  quack(): void;
}

interface Person {
  quack(): void;
}

这两个接口都有一个 quack() 方法,所以它们可以被视为相同的类型。因此,我们可以将一个实现了 quack() 方法的 Person 对象传递给期望一个 Duck 对象的函数中:

function takeDuck(duck: Duck) {
  duck.quack();
}

const person: Person = {
  quack: () => console.log('Quack!')
};

takeDuck(person); // 输出 Quack!

因为 Person 接口和 Duck 接口都定义了 quack() 方法,所以我们可以将 Person 对象传递给 takeDuck() 函数中。这就是鸭子类型的体现,即两个不同的类型可以被视为相同的类型,只要它们具有相同的属性和方法。

文章来源:https://blog.csdn.net/Sunshine_Jian/article/details/134940916
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。