我正在尝试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
字段不可用。如何处理这种情况?声明id
asoption
感觉不对,因为它不是正确的抽象。在 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# 中获得类似的结果?