TypeScript 第十节:对象

 一、对象

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() 函数中。这就是鸭子类型的体现,即两个不同的类型可以被视为相同的类型,只要它们具有相同的属性和方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值