如何在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
相关产品推荐
相关产品推荐

