печатание как это означает ({ name })
, что аргумент name
имеет тип any
, поэтому он не выдаст ошибку.
для передачи строки, например, "messages" в handleItemClick
, вы должны сделать что-то вродеthis:
handleItemClick = (name: string) => () => this.setState({ activeItem: name })
...
<Menu.Item
name='messages'
active={activeItem === 'messages'}
onClick={this.handleItemClick('message')}
/>
Как вы можете видеть в сообщении об ошибке TS, второй аргумент обратного вызова Menu.click - MouseEvent
, а не {name: string}
btw: чтобы быть более безопасным, вымогу включить strictFunctionTypes
флаг в compilerOptions
в tsconfig.json
файле
---- Отредактировано -----
Думаю, я понял вашу точку зрения.Пожалуйста, забыли предыдущую часть:
Menu.Item.onClick
уже набрана @types lib в StrictMenuItemProps
интерфейсе.Чтобы получить onClick
тип, вы можете использовать этот синтаксис StrictMenuItemProps['onClick']
, который равен onClick?: (event: React.MouseEvent<HTMLAnchorElement>, data: MenuItemProps) => void
, но вы можете использовать его без копирования кода формы lib.
Поэтому вместо ввода public handleItemClick
с помощью (arg1: Type1, arg2: Type2): Result { ...
вы можетевведите его public handleItemClick: StrictMenuItemProps['onClick'] = (e, {name}) => setState
.
TS сопоставит типы аргументов функции с аргументами, поэтому e
и name
не будут any
type
Example