React组件中能否通过Props传递Interface?若可行,接收组件中该Interface的类型是什么?
关于React组件中通过Props传递TypeScript Interface的问题
先直接给你说结论:你写的这种写法完全不可行,下面详细拆解两个问题:
问题1:上述写法是否可行?
绝对不行哦!因为TypeScript里的Interface是编译时专属的类型标记——它只在代码编译阶段帮你做类型校验,一旦代码被编译成JavaScript,这些Interface定义就会被彻底擦除,根本不会出现在运行时环境里。
你代码里写type={A},就相当于试图把一个“只存在于编译阶段的虚拟标记”当成真实的值传递,TypeScript编译器会直接报错,告诉你A不是一个可引用的值——毕竟它从始至终都不是一个能在运行时被读取的变量或对象。
问题2:若可行,Apple组件中该Interface的类型是什么?
既然原写法走不通,咱们换个实用思路:如果想要传递和类型相关的信息到组件里,必须用运行时真实存在的结构。给你两种常见方案:
- 如果你只是想约束传入组件的数据类型:根本不需要传递Interface本身,直接在Apple组件的Props里定义类型约束就行,TypeScript会自动帮你做校验:
// Apple组件里定义Props类型 interface AppleProps<T> { data: T; } const Apple = <T,>(props: AppleProps<T>) => { return <div>{props.data.name}</div>; }; // 使用组件时 interface A { name: string; } const Component = () => { const appleData: A = { name: "红富士" }; return <Apple data={appleData} />; }; - 如果确实需要传递类型的元数据(比如做动态校验、序列化):可以用class替代Interface(class在运行时是真实存在的构造函数),或者手动创建类型描述对象:
// 用class模拟类型(运行时存在) class A { name: string; constructor(name: string) { this.name = name; } } const Component = () => { return <Apple type={A} />; }; // Apple组件里的type类型就是typeof A(构造函数类型) interface AppleProps { type: typeof A; } const Apple = (props: AppleProps) => { const appleInstance = new props.type("青苹果"); return <div>{appleInstance.name}</div>; };
内容的提问来源于stack exchange,提问作者Hector
相关产品推荐
相关产品推荐

