首先,您好,我试图用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
答案 0 :(得分:4)
这两个都应该向您显示错误,因为produkt
隐式具有类型any
。
list
的问题在于它是string
或number[]
。如果要允许它同时包含字符串和数字,则需要(string | number)[]
。
您还需要使用空数组初始化liste
。
所以:
class Warenkorb {
liste: (string|number)[] = [];
// −−−−−−−−^−−−−−−−−−−−−−^ ^^^^−−−−−−−−−−−−
add(produkt: string|number):void{
// −−−−−−−−−−−−^^^^^^^^^^^^^^^
this.liste.push(produkt);
}
}
答案 1 :(得分:2)
在第二个示例中语法不正确,您需要为两个数据类型添加数组,如下所示:
class Warenkorb {
liste:string[]|number[] = [];
add(produkt):void{
this.liste.push(produkt);
}
现在,您要定义它是字符串数组还是数字数组,并用一个空数组初始化,否则它将具有默认值undefined并发生错误。
在您的情况下,您可以将其定义为字符串或数字数组。因此push方法在字符串上不存在。
string|number[]
答案 2 :(得分:2)
您写的符号说:liste的类型为string
或number[]
。
这就是你想说的
class Warenkorb {
liste: (string|number)[];
add(produkt: string|number):void {
this.liste.push(produkt);
}
}
请注意,如果要启用严格模式。您将收到另一个错误。可能会说构造函数中未定义“ liste”的代码。您要么使用liste: (string|number)[] = []
,要么创建构造函数并在其中进行分配。