typescript 如何保护可能不存在的React组件的使用?

wgx48brx  于 2023-10-22  发布在  TypeScript
关注(0)|答案(1)|浏览(97)

在我的项目中,我可能会在后端生成的文件夹中获取icons/svgs作为react组件。还有一个WAMP(bonefish/autobahn)解决方案,我可以使用图标的名称(我知道这有点奇怪,但就让它这样吧)。
他们会把所有的图标在一个文件夹中的嵌入式单位,我将不得不从那里得到的图标。图标将在一个索引文件中导出,并在我需要的地方导入。
结构将是这样的:

.
├─ src
├─── buttonManagement.tsx
|
├─ incons
├─── index.ts
├─── iconA.tsx
├─── iconB.tsx
|
.
.

index.ts

export * from "iconA";
export * from "iconB";

在buttonManagement中,我可以导入所有图标并像这样使用它们。我不能使用符号icons.iconName,因为这是在运行时完成的,我不能导入我不知道名称的东西。

import * as icons from "../icons"

const icon = icons["iconA"];

到目前为止一切顺利,但是当后端发送一个不存在的图标名称时,我该怎么办?

const icon = icons["iconC"];

然后我得到这个错误

Property 'iconC' does not exist on type 'typeof import("/home/ubuntu/workspace/code/myProject/icons/index")'

我该怎么做?
我尝试使用try/catch
这个也不行

const iconC = icons["iconC"] as React.ComponentType | undefined;
bbuxkriu

bbuxkriu1#

据我所知,你试图访问一个icon,编译时不存在。你可以像下面这样定义Icons的类型,并将类型转换为icons,如果iconC有效,则返回它,然后在编译时完成。

import * as icons from "../icons"

type Icons = {[key:string]:React.ComponentType} 

const IconC= (icons as Icons)['IconC']

return <>{IconC && <IconC />}</>

相关问题