使用TypeScript中私有集合的密钥设置动态属性

使用TypeScript中私有集合的密钥设置动态属性,typescript,Typescript,在…中运行此 我从声明的最后一部分了解到这一点 An index expression argument must be of type 'string', 'number', 'symbol, or 'any'. (property) Test.myCollection: TestObj[] 我想我可能很难理解“私人”财产。我做了大量的研究,但我真的很难理解极客的话。我似乎找不到任何人有这个问题,所以我认为这是某种不正常的事情 理想情况下,如果我尝试从测试类外部使用myCollection,

在…中运行此

我从声明的最后一部分了解到这一点

An index expression argument must be of type 'string', 'number', 'symbol, or 'any'.
(property) Test.myCollection: TestObj[]
我想我可能很难理解“私人”财产。我做了大量的研究,但我真的很难理解极客的话。我似乎找不到任何人有这个问题,所以我认为这是某种不正常的事情


理想情况下,如果我尝试从测试类外部使用myCollection,我希望显示一个错误。

字符串的基本类型是
string
,而不是
string
。相应地更改接口:

interface TestObj {
  name: string;
}
String
用于String对象,而
String
用于基本类型。例如:

var obj: any = {};
var strObj = new String("test"); // typed as String
var str = "test";                // typed as string

obj[strObj] = "test";            // error you were seeing
obj[str] = "test";               // ok

字符串的基本类型是
string
,而不是
string
。相应地更改接口:

interface TestObj {
  name: string;
}
String
用于String对象,而
String
用于基本类型。例如:

var obj: any = {};
var strObj = new String("test"); // typed as String
var str = "test";                // typed as string

obj[strObj] = "test";            // error you were seeing
obj[str] = "test";               // ok

我的猜测是TS确实认识到集合中的第一个对象没有
名称
属性-您的“索引表达式参数”解析为
未定义
。我猜您想使用
.push(REBOJ)
?谢谢!我更新了代码。尽管如此,我的猜测是TS确实识别出集合中的第一个对象没有
名称
属性-您的“索引表达式参数”解析为
未定义
。我猜您想使用
.push(REBOJ)
?谢谢!我更新了代码。尽管如此,我的猜测是TS确实识别出集合中的第一个对象没有
名称
属性-您的“索引表达式参数”解析为
未定义
。我猜您想使用
.push(REBOJ)
?谢谢!我更新了代码。尽管如此,还是得到了警告