簡體   English   中英

如何使用現有的記錄類型創建新的記錄類型?

[英]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 中,我可以使用OmitPick等實用程序類型來創建新類型,例如:

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.

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