[英]Typescript what is the type of the object : “{ [name: string]: string}”?
[英]What is the TypeScript equivalent of the Closure Compiler type !Object<string, MyClass>?
在Closure Compiler 類型系統中, ,Object<string, !MyClass>
(或等同於!Object<!MyClass>
)是一個值的類型,它是一個(非空)Object 用作字典,具有任意字符串作為MyClass 的鍵和(非空)實例作為值。 (請注意,如果myDict
屬於這種類型,則myDict[str]
可能是undefined
,但 myDict str in myDict
意味着myDict[str] instanceof MyClass
。)
在Typescript類型系統中如何表達相同類型?
有沒有辦法額外指定這樣一個字典 object 的原型必須是 null (即由Object.create(null)
生產?(AFIAK 不提供關閉類型系統的方法)
,Object<string, !MyClass>
(或等同於!Object<!MyClass>
)是一種值類型,它是(非空)Object 用作字典,具有任意字符串作為鍵和(非空) MyClass 的實例作為值。
const myDict: Record<string, MyClass> = {};
這是索引簽名的現成簡寫。 這將是等價的:
const myDict: { [key: string]: MyClass } = {};
為了確保沒有null
,您還需要啟用strictNullChecks
編譯器選項(它也包含在strict
中)。 這將刪除null
作為任何地方的可能值,除非明確提及,例如MyClass | null
MyClass | null
將允許nulls
,但MyClass
本身不允許。
有沒有辦法額外指定這樣一個字典 object 的原型必須是 null
不,這是不可能的。 TypeScript 不區分用作原型的東西。 它只對類型相等進行結構匹配,因此Object.create(null)
和{}
是等價的,因為它們只是對象。 只要它看起來與接口匹配,類型系統就不會檢查哪個用於創建給定的 object。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.