TypeScript中如何从类型声明获取__typename属性的字符串值?
答案
不行哦,你没法直接通过OfferTypes.__typename来获取这个字符串,核心原因在于TypeScript的类型是编译时概念——当代码被编译成JavaScript后,所有的类型定义都会被完全擦除,运行时根本不存在OfferTypes这个对象,自然也就没法访问它的__typename属性。
那怎么解决这个问题呢?这里有两个实用的方案:
1. 用运行时常量绑定类型
把__typename的字符串值做成一个运行时可用的常量,再让类型引用这个常量,这样既保证类型的准确性,又能在运行时拿到这个字符串:
// 定义运行时可访问的常量 export const OFFER_TYPE_PAGINATION_TYPENAME = 'OfferTypeTypePagination'; // 类型引用常量,确保类型与运行时值完全一致 export type OfferTypes = { __typename: typeof OFFER_TYPE_PAGINATION_TYPENAME; items: any[]; total: number; }; // 运行时直接调用常量即可 console.log(OFFER_TYPE_PAGINATION_TYPENAME); // 输出 "OfferTypeTypePagination"
2. 访问实例的__typename属性
如果OfferTypes是用来描述API返回的数据或者你在运行时创建的对象,那么当你有一个符合该类型的实例时,直接访问实例的__typename是完全可行的——因为这个属性是真实存在于运行时对象中的:
// 假设这是符合OfferTypes类型的实例(比如从API获取的) const offerData: OfferTypes = { __typename: 'OfferTypeTypePagination', items: [], total: 0 }; // 直接访问实例的__typename属性 console.log(offerData.__typename); // 输出 "OfferTypeTypePagination"
内容的提问来源于stack exchange,提问作者Oleksandr
相关产品推荐
相关产品推荐

