在Typescript中,在两个花括号之间有两种类型的类型批注意味着什么?

在Typescript中,在两个花括号之间有两种类型的类型批注意味着什么?,typescript,Typescript,例如: function doSomething(): { string, SomeClass } { ... } 通过使用编译器,它似乎可以接受任何返回值,该返回值是具有任意数量的string键和SomeClass值的对象 比如说: { "key1": someClass1, "key2": someClass2, ... } let a: { string, SomeClass }; let v: void = a; 我的理解正确吗 --更新-- 我需要的注释似乎是{[k

例如:

function doSomething(): { string, SomeClass } {
 ...
} 
通过使用编译器,它似乎可以接受任何返回值,该返回值是具有任意数量的
string
键和
SomeClass
值的对象

比如说:

{
 "key1": someClass1,
 "key2": someClass2,
  ...
}
let a: { string, SomeClass };

let v: void = a;
我的理解正确吗

--更新--


我需要的注释似乎是
{[key:string]:SomeClass}
否-函数签名意味着“此函数将返回一个对象,该对象包含键
字符串
SomeClass
,以及
任何
值”。这意味着这将很好地编译:

function doSomething(): { string, SomeClass } {
  return {
    string: false,
    SomeClass: 1
  }
} 
它的功能相当于:

function doSomething(): { string: any, SomeClass: any }

要了解它的真正含义,可以使用以下代码进行检查:

{
 "key1": someClass1,
 "key2": someClass2,
  ...
}
let a: { string, SomeClass };

let v: void = a;
编译器将告诉您:

Type '{ string: any; SomeClass: any; }' is not assignable to type 'void'.

因此,
string
SomeClass
在本例中根本不是类型,它们是属性名,它们的类型被推断为
any
。打开
--noImplicitAny
通常有助于澄清这一点。

如果您想要一个返回您描述的对象的函数,您应该执行以下操作:

function doSomething(): { [key: string]: someClass } {
   // Do your stuff
}
如果
someClasse
的类型未知,可以执行以下操作:

function doSomething(): { [key: string]: any } {
   // Do your stuff
}
我希望这对你有帮助,祝你今天愉快

function doSomething(): { string, SomeClass } {
 ...
} 
它实际上意味着:

function doSomething(): { string: any, SomeClass:any } {
 ...
} 
为清晰起见,可将其提取至:

interface YourReturnType{
    string: any;
    SomeClass: any;
}

function doSomething(): YourReturnType {
 ...
} 
如果要返回具有任意数量的
SomeClass
的对象,则需要使用索引签名

但是,请记住,您只能在返回的类型为
SomeClass
的类型中定义其他属性

为了避免这种混淆,我建议您打开编译器选项
noImplicitAny
,它不会让您像最初发布的那样编译代码