📜  模型没有对象成员 django - TypeScript (1)

📅  最后修改于: 2023-12-03 15:26:50.908000             🧑  作者: Mango

模型没有对象成员 Django - TypeScript

问题描述

当使用 Django 后端及 TypeScript 前端时,有时会出现以下错误:

Property 'attribute' does not exist on type 'Model'.

这通常发生在使用 Django 模型类的实例时,例如:

import axios from 'axios';
import { MyModel } from './models';

const instance = new MyModel();
axios.post('/url', instance.attribute)

这会导致 TypeScript 报错,因为在编译时没有为 instance 创建类型注释。

解决方案

一种解决方案是使用 interface 手动创建 TypeScript 类型,例如:

interface MyModelType {
  attribute: string;
}

const instance: MyModelType = { attribute: 'value' };
axios.post('/url', instance.attribute)

这个解决方案虽然简单,但需要手动创建类型注释,这可能会繁琐且容易出错。

更好的方法是使用 @types/django 包提供的自动生成类型的功能。这个包提供了一个 Model 类型,它使用 Django 模型类的定义自动生成 TypeScript 类型。

首先,确保在项目中安装了 @types/django 包:

npm install --save-dev @types/django

然后,在 TypeScript 文件中导入 Model 类型并使用它。例如:

import axios from 'axios';
import { MyModel } from './models';
import { Model } from '@types/django';

const instance: Model<MyModel> = new MyModel();
axios.post('/url', instance.attribute)

现在,instance 变量的类型注释将自动从 MyModel 类的定义生成。

结论

当使用 Django 后端及 TypeScript 前端时,使用 @types/django 包可自动生成类型注释,避免手动创建注释并减少错误。