我正在用 react/typescript 制作一个应用程序。该应用程序有自己的 ui 套件,其中包含可重复使用的组件 - 选择、输入、按钮等。因此,这些组件的不同消费者有自己的类型。
无法键入选择。简化示例 - https://codesandbox.io/s/silly-albattani-h95cfj
道具类型是selectedItem:
type SelectedItem = { value: string | number; label?: string; };
和 onChange 道具:
(option: SelectedItem) => void
使用这个组件的地方,我想把这个类型扔到 selectedItem prop
type City = { value: string; label: string }
在 onChange 道具中:
(city: City) => void
我希望 Select 组件中声明的类型是supertypes,然后:
- City 类型将是SelectedItem 的子类型
- 类型 (city: City) => void 将是(option: SelectedItem) => void 的子类型
第一个有效,但第二个无效。
这就像 ts 考虑 (city: City) => void a supertype and type (option: SelectedItem) => void a subtype