storybook [Bug]: 当使用Map值时,Typescript抱怨默认参数值

iyr7buue  于 4个月前  发布在  TypeScript
关注(0)|答案(1)|浏览(47)

描述bug

我正在尝试创建一个故事,根据文档,JSX元素不可被JSON序列化,因此我不能将它们直接作为选项传递给我的控件。由于这个原因,我正在使用Map功能将单选控件字符串选项Map到StyledComponents。
然而,尽管代码实际上似乎起作用了,但在定义args属性中的默认值时,TypeScript抱怨'string' is not assignable to ReactElement:

import type { Meta } from '@storybook/react';
import { StoryObj } from '@storybook/react';
import { styled } from '@mui/material';
import OverflowTooltip from './overflow-tooltip';

const Child = styled('div')({
	maxWidth: '10em',
	overflow: 'hidden',
	textOverflow: 'ellipsis',
	whiteSpace: 'nowrap',
});

const shortText = 'Short text';
const longText = 'This is a long text that overflows';

const meta: Meta<typeof OverflowTooltip> = {
	component: OverflowTooltip,
	title: 'Packages/Core/Overflow Tooltip',
	args: {
		title: longText,
		children: 'Short', // <--- Typescript complains about this
	},
	argTypes: {
		// ...
		children: {
			name: 'Child Text',
			control: 'radio',
			options: ['Short', 'Long'],
			mapping: {
				Short: <Child>{shortText}</Child>,
				Long: <Child>{longText}</Child>,
			},
			description:
				'If a long text is selected the content will overflow and the tooltip should show up.',
		},
	},
};

我认为这是一个bug,但我也可能是做错了什么,有什么反馈吗?

重现问题

  • 无响应*

系统信息

System:
    OS: Windows 10 10.0.20348
    CPU: (8) x64 Intel(R) Xeon(R) Gold 6258R CPU @ 2.70GHz
Binaries:
    Node: 18.15.0 - C:\Program Files\nodejs\node.EXE
    npm: 9.5.0 - C:\Program Files\nodejs\npm.CMD
Browsers: {}
npmPackages:
    @storybook/addon-essentials: ^7.0.7 => 7.0.20 
    @storybook/core-common: ^7.0.7 => 7.0.20 
    @storybook/core-server: ^7.0.7 => 7.0.20 
    @storybook/react-vite: ^7.0.7 => 7.0.20

附加上下文

我尝试省略那一行,但我得到了以下错误:

我还尝试直接将值分配给children arg/prop:

children: <Child>{shortText}</Child>

但是我在控制台中收到了以下警告:

jfgube3f

jfgube3f1#

我正在与 Storybook 8.0.4 遇到相同的问题!
args 中的 children 类型与 options 的键不匹配,但它仍然要求我传递 ReactElement ...
尽管使用 JSX 值的Map器处理复杂值的文档建议和示例仅显示了这一点🤷‍♂️
目前,我只是用 @ts-expect-error 将其静音:

const meta = {
	title: '...',
	component: ...,
	tags: ['autodocs'],
	argTypes: {
		children: {
			options: Object.keys(annotatorContent),
			mapping: annotatorContent
		}
	}
} satisfies Meta<typeof WebtextsAnnotator>;

export default meta;
type Story = StoryObj<typeof meta>;

export const Plaintext: Story = {
	args: {
		// @ts-expect-error: The enum is mapped to the page content
		children: 'Plaintext'
	}
};

但这是文档的一个缺陷,以及/或 StoryObj 类型的推断🤷‍♂️

相关问题