一个例子:
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 }
没了-该函数签名是指"这个函数会返回一个具有键的对象string和SomeClass,和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)
要了解它的真正含义,您可以使用如下代码进行检查:
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通常有助于澄清这一点。
| 归档时间: |
|
| 查看次数: |
783 次 |
| 最近记录: |