2016-04-01 48 views
3

我想知道在使用TypeScript時是否有任何工具或技術用於對對象數據執行低級別驗證。一個例子是HTTP服務上POST請求的JSON主體。通常我爲預期的數據創建了一個接口,然後將數據轉換爲該接口,但我知道這是膚淺的。對TypeScript中的非類型數據執行類型

例子:

router.route('/supercres') 
    .get((req, res, next) => { 
     const typedBody = <SuperCresBody>req.body; 
    }) 

interface SuperCresBody { 
    name: string, 
    yoyo: boolean, 
} 

與執行該接口的問題是,打字稿只是一個編譯時的概念,不強制在運行任何東西。知道這一點,我很好奇,如果有人找到了一個聰明的方式,沒有大量的樣板或工具,以便在運行時爲這些東西進行類型檢查,而不必將界面合同重複爲一組必要的檢查作爲驗證步驟。

在一個有點相關的說明中,在most recent episode of Functional Geekery中,Matthias Felleisen解釋了類似球拍類似的需求,靠近該劇集的尾部。

相關閱讀:

+2

一種相關的...代碼生成對此很有用。我一直在研究[this](https://github.com/dsherret/ts-type-in​​fo),它允許你從代碼中獲取信息,修改它,然後寫出新的代碼(仍然需要很多工作。 ..這是一個很大的任務)。然後是[this](https://github.com/dsherret/server-bridge),它允許您生成客戶端代碼以從服務器端代碼訪問服務器。目前它還沒有得到很好的測試,雖然還有一些實驗......我寫它非常快地展示了這個概念。 –

+0

運行時檢查的問題是,它會花費CPU資源來執行。儘管如此,這是可能的。 – BotMaster

+0

@BotMaster,我沒有看運行時類型檢查一切,但主要是來自應用程序邊界(例如HTTP請求,文件I/O)的數據。我不介意手動完成這是必須要做的事情,但是利用TypeScript中類型註釋提供的類型信息會很好。 – jpierson

回答

0

檢查這些當量項目:

我使用最新的,它完美的作品,但前者看起來很棒。

在這兩種情況下,你建立你使用的驗證:在運行時

    • 檢查對象中提取,可在編譯時

    被用來在特定的靜態類型(api)用例,您還可以使用一些工具從您生成的JSON或XML中提取TS類型

    您還可以從JSON數據輕鬆生成類型:

    http://json2ts.com/