定製打字稿型
回答
這是不可能的。
你必須編寫和使用這樣的事:
type MyType = 'left' | 'right';
const MyTypeMeta = ["left", "right"];
有an old discussion here關於這個問題,有很多相互關聯的問題。也許希望this message但現在沒有完成。
它實際上是我們試圖避免的解決方案:) –
@YananAugen我明白,我有同樣的問題。我使用這個解決方案是因爲我沒有找到更好的(去年1月)。但看看我發佈的最後一個鏈接。這真的是我們需要的。也許不完美,但非常有前途。 – Paleo
你不能做到這一點與「簡單型」,但由於Typescript 2.4你可以使用枚舉字符串值:
enum MyType {
LEFT='left',
RIGHT='right'
}
for (let i in MyType) {
console.log(MyType[i]); //will print "left" and "right"
}
它的工作原理,因爲在運行時的命名對象MyType的存在,它的價值是{RIGHT:'right',LEFT:'left'}
。
在運行時添加類型信息是TypeScript的non-goal。這意味着他們不想讓你定義一個類型,然後在運行時檢查它。
但是,相反就好了:創建一個運行時存在的對象,並使用TypeScript來推斷它的類型信息。這裏有一種方法可以處理你的情況。
首先,添加以下輔助函數:
function stringLiteralArray<T extends string>(...args: T[]): T[] {
return args;
}
這有助於打字稿推斷字符串文本而不是僅僅string[]
的數組。
現在,您可以創建一個名爲myType
運行時的對象,並從中獲得MyType
:
const myType = stringLiteralArray('left', 'right'); // ('left'|'right')[]
type MyType = (typeof myType)[number]; // 'left' | 'right'
那麼你有兩種運行時和編譯時類型信息。您可以檢查是否一個變量是該類型的具有下列用戶定義類型後衛:
function isMyType(x: any): x is MyType {
return myType.includes(x); // needs es2016 at least, or implement yourself
}
可以遍歷myType
在運行時,你可以在編譯時間上MyType
做exhaustiveness checking:
function foo(x: MyType): string { // error, not exhaustive
switch (x) {
case 'left': return 'L';
case 'rihgt': return 'R'; // error, 'rihgt' isn't 'left'|'right'
}
}
希望有幫助。
- 1. 控制打字稿
- 2. 編制打字稿
- 3. 打字稿類型限制分配
- 4. 打字稿:類型定義(接口)
- 5. 打字稿定製d.ts文件
- 6. 泛型打字稿1.8.2
- 7. 打字稿原型問題
- 8. 安全打字稿模型
- 9. 逆打字稿型導引
- 10. 打字稿@類型/在packages.json
- 11. 打字稿亞型檢查
- 12. 數組原型打字稿
- 13. 打字稿:在功能型
- 14. 錯誤與打字稿定製類型聲明
- 15. 從另一個打字稿包導入打字稿型
- 16. 打字稿:如何調用從打字稿類utli JS功能的定製
- 17. 打字稿沒有編制
- 18. 打字稿分配泛型類型
- 19. 定義與打字稿
- 20. Kotlin REST打字稿定義
- 21. 打字稿綁定問題
- 22. 打字稿定義文件
- 23. 打字稿中的字符串類型
- 24. 原型字符串以打字稿
- 25. 打字稿:強制仿製T和U
- 26. 在打字稿中定義打印的類型
- 27. 打字稿 - 指定類型的多種類型
- 28. 打字稿泛型類型的所有變量定義
- 29. 使用類型安全定義打字稿泛型
- 30. 打字的打字稿
在運行時您無法對類型進行任何操作。這意味着你不能在運行時檢查或迭代類型。 –