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

如何在TypeScript接口中定义字符串数组?解决赋值报错

解决TypeScript接口中features属性的类型不匹配问题

咱们一步步拆解你遇到的问题哈!你两次尝试的接口定义和实际创建的对象类型都没对上,所以才会报错,我给你分析清楚并给出修正方案:

第一种尝试的问题分析

你定义的接口是:

export interface ITarifFeatures { key: string; }
export interface ITarif { features: ITarifFeatures[]; }

这里ITarif的features要求是**ITarifFeatures对象的数组**,也就是每个元素都得是带key属性的对象。但你创建对象时写的features: ["СМС уведомления"]是字符串数组,类型完全不匹配,自然会报错。

修正第一种尝试的写法

如果你的需求是每个feature都对应一个带key的对象,那创建对象时要把数组元素写成对象形式:

let obj: ITarif = { 
  name: "Базовый", 
  description: "Подходит для...", 
  currency: "A", 
  price: 1.99, 
  period: "Месяц", 
  features: [{ key: "СМС уведомления" }] // 改成对象数组
};

第二种尝试的问题分析

你改成了类型别名:

export type ITarifFeatures = { key: string[]; }
export interface ITarif { 
  name: string; 
  description: string; 
  currency: string; 
  price: number; 
  period: string; 
  features: ITarifFeatures 
}

这里features要求是一个包含key属性(值为字符串数组)的对象,但你还是传了字符串数组["СМС уведомления"],类型依然不匹配。

修正第二种尝试的写法

如果你的需求是features是一个带key数组的对象,那创建对象时要包裹成对象:

let obj: ITarif = { 
  name: "Базовый", 
  description: "Подходит для...", 
  currency: "A", 
  price: 1.99, 
  period: "Месяц", 
  features: { key: ["СМС уведомления"] } // 改成包含key数组的对象
};

更简单的方案(如果不需要额外对象结构)

如果你的features就是单纯的字符串数组,完全不需要额外的key属性结构,那可以直接简化接口定义:

export interface ITarif { 
  name: string; 
  description: string; 
  currency: string; 
  price: number; 
  period: string; 
  features: string[] // 直接定义为字符串数组
}

// 这样创建对象就完全符合要求了
let obj: ITarif = { 
  name: "Базовый", 
  description: "Подходит для...", 
  currency: "A", 
  price: 1.99, 
  period: "Месяц", 
  features: ["СМС уведомления"] 
};

核心就是要保证接口定义的类型和实际赋值的对象结构完全一致,TypeScript的类型检查就是严格匹配结构的哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:33:39