[英]How to create a new Record Type using existing Record Type?
我正在嘗試使用 Suave 創建一個簡單的Todo
REST API。 Todo
類型定義為:
type Todo =
{ id: Guid
title: string
isComplete: bool
deadline: DateTime option }
這種類型在使用Get By Id GET /todos/{guid}
和Get List GET /todos/
API 時非常有效。 但是當創建一個新的Todo
項時,payload 不包含id
屬性,因為它將作為 DB 操作的一部分自動生成。 因此,在 REST API 調用之后:
POST /todos/
{
"title": "Hello world",
"isComplete": false,
"deadline": null
}
但是,問題是 JSON 反序列化中斷,因為id
字段不可用。 如何處理這種情況? 將id
聲明為option
感覺不對,因為它不是正確的抽象。 在 TypeScript 中,我可以使用Omit
、 Pick
等實用程序類型來創建新類型,例如:
export interface Todo {
id: string;
title: string;
isComplete: boolean;
deadline?: string
}
// Create new Type from existing type!
export type TodoInput = Omit<Todo, 'id'>;
let payload: TodoInput = {
isComplete: false,
title: "Hello"
}
如何在 F# 中獲得類似的結果?
即使您沒有 id,您也應該能夠反序列化。 以下對我來說很好。 id 將為 Guid.empty。
open Newtonsoft.Json
type Todo =
{ id: Guid
title: string
}
let data = JsonConvert.DeserializeObject<Todo>("{\"title\":\"test\"}")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.