在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
,它不会让您像最初发布的那样编译代码