• 【零基础入门TypeScript】对象


    目录

    句法

    示例:对象文字表示法

    TypeScript 类型模板

    示例:Typescript 类型模板

    示例:对象作为函数参数

    示例:匿名对象

    鸭子打字

    例子



    对象是包含一组键值对的实例这些值可以是标量值或函数,甚至是其他对象的数组。语法如下 -

    句法

    1. var object_name = {
    2. key1: “value1”, //scalar value
    3. key2: “value”,
    4. key3: function() {
    5. //functions
    6. },
    7. key4:[“content1”, “content2”] //collection
    8. };

    如上所示,对象可以包含标量值、函数以及数组和元组等结构。

    示例:对象文字表示法

    
    
    1. var person = {
    2. firstname:"Tom",
    3. lastname:"Hanks"
    4. };
    5. //access the object values
    6. console.log(person.firstname)
    7. console.log(person.lastname)

    编译时,它将在 JavaScript 中生成相同的代码。

    上述代码的输出如下 -

    1. Tom
    2. Hanks

    TypeScript 类型模板

    假设您在 JavaScript 中创建了一个对象文字:

    
    
    1. var person = {
    2. firstname:"Tom",
    3. lastname:"Hanks"
    4. };

    如果您想向对象添加一些值,JavaScript 允许您进行必要的修改。假设我们稍后需要向 person 对象添加一个函数,这就是您可以执行此操作的方式。

    
    
    person.sayHello = function(){ return "hello";}

    如果您在 Typescript 中使用相同的代码,编译器会给出错误。这是因为在 Typescript 中,具体对象应该有一个类型模板。Typescript 中的对象必须是特定类型的实例。

    您可以通过在声明中使用方法模板来解决此问题。

    示例:Typescript 类型模板

    
    
    1. var person = {
    2. firstName:"Tom",
    3. lastName:"Hanks",
    4. sayHello:function() { } //Type template
    5. }
    6. person.sayHello = function() {
    7. console.log("hello "+person.firstName)
    8. }
    9. person.sayHello()

    编译时,它将在 JavaScript 中生成相同的代码。

    上述代码的输出如下 -

    hello Tom

    对象也可以作为参数传递给函数。

    示例:对象作为函数参数

    
    
    1. var person = {
    2. firstname:"Tom",
    3. lastname:"Hanks"
    4. };
    5. var invokeperson = function(obj: { firstname:string, lastname :string }) {
    6. console.log("first name :"+obj.firstname)
    7. console.log("last name :"+obj.lastname)
    8. }
    9. invokeperson(person)

    该示例声明了一个对象文字。函数表达式是通过传递 person 对象来调用的。

    编译时,它将生成以下 JavaScript 代码。

    
    
    1. //Generated by typescript 1.8.10
    2. var person = {
    3. firstname: "Tom",
    4. lastname: "Hanks"
    5. };
    6. var invokeperson = function (obj) {
    7. console.log("first name :" + obj.firstname);
    8. console.log("last name :" + obj.lastname);
    9. };
    10. invokeperson(person);

    其输出如下 -

    1. first name :Tom
    2. last name :Hanks

    您可以动态创建并传递匿名对象

    示例:匿名对象

    
    
    1. var invokeperson = function(obj:{ firstname:string, lastname :string}) {
    2. console.log("first name :"+obj.firstname)
    3. console.log("last name :"+obj.lastname)
    4. }
    5. invokeperson({firstname:"Sachin",lastname:"Tendulkar"});

    编译时,它将生成以下 JavaScript 代码。

    
    
    1. //Generated by typescript 1.8.10
    2. var invokeperson = function (obj) {
    3. console.log("first name :" + obj.firstname);
    4. console.log("last name :" + obj.lastname);
    5. };
    6. invokeperson({ firstname: "Sachin", lastname: "Tendulkar" });
    7. invokeperson({ firstname: "Sachin", lastname: "Tendulkar" });

    其输出如下 -

    1. first name :Sachin
    2. last name :Tendulkar

    鸭子打字

    在鸭子类型中,如果两个对象共享相同的属性集,则两个对象被认为是同一类型。鸭子类型验证对象中是否存在某些属性,而不是它们的实际类型,以检查它们的适用性。这个概念通常用以下短语来解释 -

    “当我看到一只鸟像鸭子一样走路、像鸭子一样游泳、像鸭子一样嘎嘎叫时,我就称那只鸟为鸭子。”

    TypeScript 编译器实现了鸭子类型系统,允许动态创建对象,同时保持类型安全。下面的示例展示了如何将未显式实现接口但包含函数所需的所有成员的对象传递给函数。

    例子

    
    
    1. interface IPoint {
    2. x:number
    3. y:number
    4. }
    5. function addPoints(p1:IPoint,p2:IPoint):IPoint {
    6. var x = p1.x + p2.x
    7. var y = p1.y + p2.y
    8. return {x:x,y:y}
    9. }
    10. //Valid
    11. var newPoint = addPoints({x:3,y:4},{x:5,y:1})
    12. //Error
    13. var newPoint2 = addPoints({x:1},{x:4,y:3})
  • 相关阅读:
    华为云云耀云服务器L实例评测|云耀云服务器L实例部署DjangoBlog个人博客系统
    精品Python宠物领养网站系统失物招领
    NYIST(计科ACM&TC)第三次招新赛题解
    《机器学习实战》7.AdaBoost元算法提高分类性能
    uniapp scroll view 解决高度自适应、弹框滚动穿透等问题。
    多模态GPT-V出世!36种场景分析ChatGPT Vision能力,LMM将全面替代大语言模型? | 京东云技术团队
    元宇宙iwemeta:风口上的脑机接口,偷偷的解密大脑
    初始化项目骨架(Web3项目一实战之一)
    springboot毕设项目城市轨道交通线路查询p2df3(java+VUE+Mybatis+Maven+Mysql)
    Servlet中Session会话追踪的实现机制
  • 原文地址:https://blog.csdn.net/arthas777/article/details/135342996