我正在尝试Todo使用 Suave 创建一个简单的 REST API。Todo类型定义为:
type Todo =
{ id: Guid
title: string
isComplete: bool
deadline: DateTime option }
这种类型在使用Get By IdGET /todos/{guid}和Get ListGET /todos/ API 时非常有效。但是在创建新Todo项目时,有效负载不包含id属性,因为它将作为数据库操作的一部分自动生成。因此,进行了以下 REST API 调用:
POST /todos/
{
"title": "Hello world",
"isComplete": false,
"deadline": null
}
但是,问题是 JSON 反序列化中断,因为该id字段不可用。如何处理这种情况?声明idasoption感觉不对,因为它不是正确的抽象。在 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# 中获得类似的结果?