闭包编译器类型的TypeScript等价物是什么!对象<;字符串,MyClass>;?

闭包编译器类型的TypeScript等价物是什么!对象<;字符串,MyClass>;?,typescript,google-closure-compiler,Typescript,Google Closure Compiler,在中,!Object(或者相当于!Object)是一种值类型,它是一个用作字典的(非空)对象,具有任意字符串作为键,MyClass的(非空)实例作为值。(请注意,如果myDict属于此类型,则myDict[str]可能是未定义的,但myDict中的str意味着MyClass的myDict[str]实例) 如何在Typescript类型系统中表示相同的类型 是否有任何方法可以额外指定这样一个dictionary对象的原型必须为null(即由object.create(null))生成?(据了解,闭

在中,
!Object
(或者相当于
!Object
)是一种值类型,它是一个用作字典的(非空)对象,具有任意字符串作为键,MyClass的(非空)实例作为值。(请注意,如果
myDict
属于此类型,则
myDict[str]
可能是
未定义的
,但myDict中的
str
意味着MyClass的
myDict[str]实例

如何在Typescript类型系统中表示相同的类型

是否有任何方法可以额外指定这样一个dictionary对象的原型必须为null(即由
object.create(null)
)生成?(据了解,闭包类型系统没有提供一种方法来指定这一点。)

!Object
(或相当于
!Object
)是一种值类型,它是一个用作字典的(非空)对象,具有任意字符串作为键,MyClass的(非空)实例作为值

这将是:

为了确保没有任何内容是
null
,您还需要启用(它也包含在中)。这将在任何地方删除
null
作为可能的值,除非明确提及,例如,
MyClass | null
将允许
null
,但
MyClass
本身将不允许

有没有办法另外指定这样一个dictionary对象的原型必须为null

不,不可能。TypeScript不区分用作原型的内容。它只对类型相等进行结构匹配,因此
Object.create(null)
{}
是等效的,因为它们只是对象。类型系统不会检查用于创建给定对象的对象,只要它似乎与接口匹配

!Object
(或相当于
!Object
)是一种值类型,它是一个用作字典的(非空)对象,具有任意字符串作为键,MyClass的(非空)实例作为值

这将是:

为了确保没有任何内容是
null
,您还需要启用(它也包含在中)。这将在任何地方删除
null
作为可能的值,除非明确提及,例如,
MyClass | null
将允许
null
,但
MyClass
本身将不允许

有没有办法另外指定这样一个dictionary对象的原型必须为null

不,不可能。TypeScript不区分用作原型的内容。它只对类型相等进行结构匹配,因此
Object.create(null)
{}
是等效的,因为它们只是对象。类型系统不会检查用于创建给定对象的对象,只要它看起来与接口匹配。

记录
应在
“strict”下工作:true
,该类型被写入
{[key:string]:MyClass}
记录
应在
“strict”下工作:true
,该类型被写入
{[key:string]:MyClass}
const myDict: Record<string, MyClass> = {};
const myDict: { [key: string]: MyClass } = {};