在Typescript对象中添加新属性

时间:2018-06-27 05:52:45

标签: javascript angular typescript

我正在尝试在对象中添加新属性,但打字稿给出了错误。

  

错误TS2339:类型“对象”上不存在属性“数量”。

text = c("word 1", "word 2", "word 3", "word 4")
for (word in text) {
  cat("\014")
  cat("Text =","\u001b[1m",word)
  Sys.sleep(0.4);
  cat("\u001b[0m");
  flush.console(); 
}

7 个答案:

答案 0 :(得分:3)

Object是错误的注释。更改注释:

product: {qty: number} = {qty: 0};

foo(){
  this.product.qty = 1;
}

答案 1 :(得分:1)

  

Number是数据类型,而不是值。该对象仅接受该值,而不接受数据类型。所以你不能将数字声明为值

尝试这种简单方式

product: any;

foo(){
  this.product.qty = 1;
}

答案 2 :(得分:1)

您似乎已尝试执行此操作:

product: {qty: number} = {};

foo(){
  this.product.qty = 1;
}

但是,这将不起作用,因为开始使用的对象不完整。您应该将该属性标记为可选:

product: {qty?: number} = {};

foo(){
  this.product.qty = 1;
}

或提供一些默认值:

product: {qty: number | null} = {qty: null};
// or just {qty: number}, if you don't use strict null checks

foo(){
  this.product.qty = 1;
}

如果默认值也是数字,您甚至可以通过使用类型推断来简化此操作:

product = {qty: 0};

foo(){
  this.product.qty = 1;
}

所有这三个示例都可以使用(当然,如果您在函数this中为foo提供了适当的值,但我想您还是会这样做)。

答案 3 :(得分:0)

将对象更改为任何类型

product: any = {qty: Number};

foo(){
  this.product.qty = 1;
}

答案 4 :(得分:0)

使用此

product = {qty: null};

OR

product = {qty: 0};

代替这个-

product: Object = {qty: Number};

因为您将键和值初始化为type的键和值是对象,所以代替分配类型,您需要设置一些值,例如number或{{1} }或您想要用作默认值的任何内容。

答案 5 :(得分:0)

您也可以这样做,并在产品中添加尽可能多的新属性

product: Object = new Object();

foo(){
  this.product['qty'] = 1;
}

答案 6 :(得分:0)

没有额外代码的解决方案是允许使用赋值运算符创建新属性的配置选项,但由于没有这样的属性,我修补了打字稿代码以允许它。

在 tsc.js 和 typescript.js 上都这样做,这些文件在 node_modules/typescript

找到这一行

 if (right.escapedText && !checkAndReportErrorForExtendingInterface(node)) 

把它贴在它下面

return getTypeOfSymbol(right);

我不得不承认,我不是一个打字稿 src 代码开发人员,我还没有广泛测试这样做的副作用,但它适用于我的项目

linter 会显示错误,但编译正常