Arm*_*enB 7 javascript typescript
这可能是一个相对菜鸟的问题,我有一个界面
interface Employee {
name: string
}
Run Code Online (Sandbox Code Playgroud)
我希望在将其保存到数据库后有一个扩展版本:
interface EmployeeDb {
id: string,
name: string
}
Run Code Online (Sandbox Code Playgroud)
我想在处理检查时区分它,以便在将数据保存到我的存储中后,类型检查器不会抱怨没有 id 值。这意味着我想避免使用这个:
interface Employee {
id?: string,
name: string
}
Run Code Online (Sandbox Code Playgroud)
这样我就不用到处检查id了。
所以我尝试这样做:
type Employee = {
name: string
}
type IDatabaseObject<T> = {
id: IDatabaseObjectId;
[P in keyof T]: T[P];
};
type EmployeeDb = IDatabaseObject<Employee>
Run Code Online (Sandbox Code Playgroud)
IDE 给出了 top 语法错误
计算属性名称必须为“string”、“number”、“symbol”或“any”类型。ts(2464)
所以我尝试使用接口并扩展它
interface IDatabaseObject {
id: string
}
interface EmployeeDb extends Employee, IDatabaseObject {}
Run Code Online (Sandbox Code Playgroud)
但在后端代码中,当我尝试使用此设置时,我再次收到来自 vscode eslint 的错误。我这里有一个小代码,它将数据添加到本地存储,生成一个 id 并返回数据。参见代码:
class DbAsyncStorageTemplate<
InputDataType,
OutputDataType extends IDatabaseObject
> {
async addEntry(object: InputDataType): Promise<OutputDataType> {
const id: string = generateUuid()
const dbObject = { id, ...object }
dbObject.id = id
// add the item to AsyncStorage directly
await AsyncStorage.setItem(id, JSON.stringify(object))
// ERROR HERE: return the new object
return dbObject as OutputDataType
}
}
}
Run Code Online (Sandbox Code Playgroud)
但我从 IDE (eslint) 得到最后一行的错误
类型的转换 '{ id: string; } & InputDataType' 来输入 'OutputDataType' 可能是一个错误,因为这两种类型都没有与另一种类型充分重叠。如果这是故意的,请首先将表达式转换为“未知”。'{ id: 字符串; “OutputDataType”可分配给“OutputDataType”类型的约束,但“OutputDataType”可以使用约束“any”的不同子类型进行实例化。
关于如何正确执行此操作有什么建议吗?
小智 6
我相信您正在寻找类型的交集。
type Employee = {
name: string
}
type EmployeeDb = {
id: string;
} & Employee;
Run Code Online (Sandbox Code Playgroud)
您还可以根据需要定义原始数据库接口和使用Pick或实用程序。Omit
interface Todo {
title: string;
description: string;
completed: boolean;
}
type TodoPreview = Pick<Todo, "title" | "completed">;
const todo: TodoPreview = {
title: "Clean room",
completed: false,
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13195 次 |
| 最近记录: |