【问题标题】:Why is method push() underlined?为什么方法 push() 下划线?
【发布时间】:2020-06-25 15:12:58
【问题描述】:

首先,你好,我试着用 TypeScript 制作一个小虚拟购物车来练习。所以我做到了,现在我有一个问题是代码。

class Warenkorb {
    liste:string[];

    add(produkt):void{
        this.liste.push(produkt);
    }
}

这是第一个可以正常工作的没有下划线。

class Warenkorb {
    liste:string|number[];

    add(produkt):void{
        this.liste.push(produkt);
    }
}

所以这就是问题所在。当我想要数字或字符串时,push 方法是红色下划线,这对练习来说不是问题,因为产品应该只是字符串,但我也想知道为什么会这样。

对不起,我是德国人/奥地利人:D

【问题讨论】:

  • 该列表应该是(一个数字数组)还是(一个字符串数组)...或者您是否尝试制作一个数字和字符串的混合数组?

标签: javascript arrays string typescript


【解决方案1】:

这两个都应该向您显示错误,因为 produkt 隐式具有 any 类型。

list 的问题在于它是 stringnumber[]。如果你想让它同时允许字符串和数字,你需要(string | number)[]

你还需要用一个空数组初始化liste

所以:

class Warenkorb {
    liste: (string|number)[] = [];
// −−−−−−−−^−−−−−−−−−−−−−^   ^^^^−−−−−−−−−−−−
    add(produkt: string|number):void{
// −−−−−−−−−−−−^^^^^^^^^^^^^^^
        this.liste.push(produkt);
    }
}

【讨论】:

    【解决方案2】:

    你写的符号说:liste 的类型是stringnumber[]

    这就是你想说的

    class Warenkorb {
      liste: (string|number)[];
    
      add(produkt: string|number):void {
        this.liste.push(produkt);
      }
    }
    

    附带说明,如果您要启用严格模式。你会得到另一个错误。一个会说“liste”没有在构造函数中定义的人。你要么应该使用liste: (string|number)[] = [],要么创建构造函数并在那里分配它。

    【讨论】:

      【解决方案3】:

      第二个例子中的语法不正确,你需要为联合中的两种数据类型添加数组,如下所示:

      class Warenkorb {
      liste:string[]|number[] = [];
      
      add(produkt):void{
          this.liste.push(produkt);
      }
      

      现在您定义它将是字符串数组或数字数组并使用空数组进行初始化,否则它将具有未定义的默认值并会发生错误。

      在您的情况下,您将其定义为字符串或数字数组。所以字符串上不存在 push 方法。

      string|number[]
      

      【讨论】:

        猜你喜欢
        • 2013-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-28
        • 2022-12-01
        • 2017-06-03
        • 2016-10-26
        • 2013-02-12
        相关资源
        最近更新 更多