在Typescript中,两个花括号之间有两种类型的类型注释吗?

Nel*_*son 2 typescript

一个例子:

function doSomething(): { string, SomeClass } {
 ...
} 
Run Code Online (Sandbox Code Playgroud)

从使用编译器开始,似乎它将接受任何返回值,该返回值是具有任意数量的string键和SomeClass值的对象.

所以像这样:

{
 "key1": someClass1,
 "key2": someClass2,
  ...
}
Run Code Online (Sandbox Code Playgroud)

我的理解是否正确?

--Update--

似乎我需要的注释是 { [key: string]: SomeClass }

Joe*_*lay 6

没了-该函数签名是指"这个函数会返回一个具有键的对象stringSomeClass,和any值".这意味着这将编译正常:

function doSomething(): { string, SomeClass } {
  return {
    string: false,
    SomeClass: 1
  }
} 
Run Code Online (Sandbox Code Playgroud)

它在功能上等同于:

function doSomething(): { string: any, SomeClass: any }
Run Code Online (Sandbox Code Playgroud)


art*_*tem 5

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

let a: { string, SomeClass };

let v: void = a;
Run Code Online (Sandbox Code Playgroud)

编译器会告诉你:

Type '{ string: any; SomeClass: any; }' is not assignable to type 'void'.
Run Code Online (Sandbox Code Playgroud)

string因此,SomeClass在这种情况下,根本不是类型,它们是属性名称,并且它们的类型被推断为any. 打开--noImplicitAny通常有助于澄清这一点。