簡體   English   中英

閉包編譯器類型 !Object 的 TypeScript 等效項是什么<string, myclass> ?</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 的實例作為值。

這將是Record<Keys, Type>實用程序類型

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM