Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.3k views
in Technique[技术] by (71.8m points)

casting - Typescript - Type 'undefined' is not assignable to type 'string | number | symbol'

I have a type export type status = 'success' | 'error' | undefined;

Now, there is an object that maps to an icon

const iconsMap: Record<status, React.ReactSVGElement> = {
  error: ErrorIcon,
  success: SuccessIcon,
};

Here, since there is no key undefined in iconsMap, it causes a typescript error

Type 'string | undefined' does not satisfy the constraint 'string | number | symbol'. Type 'undefined' is not assignable to type 'string | number | symbol'.

How do i solve this?

question from:https://stackoverflow.com/questions/65906394/typescript-type-undefined-is-not-assignable-to-type-string-number-symbo

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You could exclude undefined using NonNullable utility:

const iconsMap: Record<NonNullable<status>, React.ReactSVGElement> = {
  error: ErrorIcon,
  success: SuccessIcon,
};

And formally you get the error not because there is no key undefined, but because Record has generic type constraint and accepts only string | number | symbol.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...