You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript 如何正确为对象属性定义类型?

问题原因

你当前的写法混淆了类型声明和变量赋值的逻辑:Array<IProduct>是TypeScript类型,不能直接当做对象属性的初始值写到对象字面量里,所以会触发报错。

正确写法

方案1:先定义对象类型接口(推荐,可维护性最高)

先给整个form对象定义专属类型,再给form变量加类型注解,初始值要和定义的类型匹配:

interface IProduct {
  artikelname: string
  artikelnummer: string
  barccode: string
}

// 第一步:定义form对象的整体类型
interface IForm {
  date: any[] // 可根据实际业务替换为更精准的类型,比如Date[]、string[]
  R2Os: any[] // 同上,替换为数组元素的实际类型
  type: number
  cats: null | unknown // 如果你后续cats会赋值其他类型,比如字符串、对象,替换为null | 对应类型即可
  selected_product: IProduct[] // 等价于Array<IProduct>
}

// 第二步:给form变量加类型注解,属性赋值符合类型要求的初始值
const form: IForm = {
  date: [],
  R2Os: [],
  type: 1,
  cats: null,
  selected_product: [] // 数组类型默认初始值为空数组即可
}

方案2:框架场景下的简化写法

如果是在框架中使用,可以直接把类型传入框架API的泛型中:

  • Vue3响应式对象示例:
import { reactive } from 'vue'
const form = reactive<IForm>({
  date: [],
  R2Os: [],
  type: 1,
  cats: null,
  selected_product: []
})
  • React useState示例:
import { useState } from 'react'
const [form, setForm] = useState<IForm>({
  date: [],
  R2Os: [],
  type: 1,
  cats: null,
  selected_product: []
})

内容的提问来源于stack exchange,提问作者morteza mortezaie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 14:36:03