能否标准化接口中的类型?如何简洁声明接口所有元素为string类型?
TypeScript BookProps 接口问题解答
先看原接口代码:
export interface BookProps { link: string; title: string; image: string; author: string; discount: string; publisher: string; description: string; }
问题1:是否可以对接口中的类型进行标准化?
完全可以。你可以把重复的string类型抽成单独的类型别名,后续修改类型时会更省心。比如:
// 定义统一的字段类型 type BookField = string; export interface BookProps { link: BookField; title: BookField; image: BookField; author: BookField; discount: BookField; publisher: BookField; description: BookField; }
这样如果之后要调整字段类型(比如部分字段允许undefined),直接改BookField的定义就行,不用逐个字段修改。要是想让类型语义更清晰,还能按字段用途细分,比如把discount单独定义成DiscountType = string,这也属于类型标准化的范畴。
问题2:有没有简洁的方式表示该接口内的所有元素均为string类型?
有两种常用的简洁写法:
- 使用
Record工具类型Record<K, T>能快速生成一个“键为K类型、值为T类型”的对象类型。先把所有字段名拼成联合类型,再结合Record定义:
type BookFieldNames = 'link' | 'title' | 'image' | 'author' | 'discount' | 'publisher' | 'description'; export type BookProps = Record<BookFieldNames, string>;
这种方式能严格限定字段名,和原接口的约束完全一致。
- 使用索引签名
如果不需要严格限制字段名(允许额外的字符串键),可以用索引签名:
export interface BookProps { [key: string]: string; }
但要注意,这种写法不限制具体字段,只要键是string类型就符合要求,要是需要严格约束字段集合,优先选第一种Record的方式。
内容的提问来源于stack exchange,提问作者ddhh512
相关产品推荐
相关产品推荐

