К счастью, аннотацию типа потока, которую вы хотите, можно применять в контекстах, выходящих за рамки Реагирования. В общем, если вы хотите, исключающее или типа проверки вы можете сделать следующее:
type Something = {
prop1: number,
prop2?: null
}
type Another = {
prop1?: null,
prop2: number
}
function foo(parameter: Something | Another) {
}
foo({ prop1: 10 }); // Good
foo({ prop2: 10 }); // Good
foo({ prop1: 10, prop2: 10 }); // Bad
Если вы хотите инклюзивное или тип проверки, вы можете сделать это:
type Something = {
prop1: number,
prop2?: null
}
type Another = {
prop1?: null,
prop2: number
}
type SomethingAndAnother = {
prop1: number,
prop2: number
}
function foo(parameter: Something | Another | SomethingAndAnother) {
}
foo({ something: 10, prop1: 10 }); // Good
foo({ something: 10 }); // Bad
foo({ prop1: 10 }); // Good
foo({ prop2: 10 }); // Good
foo({ prop1: 10, prop2: 10 }); // Good
В React, можно определить тип на props
собственности, например, так:
class TodoList extends React.Component {
props: Something | Another;
render(): React.Element {
return (
// ....
)
}
}
Я думаю, что ваш вопрос должен быть применим к любой среде, что ваши цели коды потока, в том числе, но не ограничиваясь этим, React, и все остальное. Разве не было бы больше смысла в вопросе название и тело вашего вопроса, чтобы * исключить * Реагировать? Я просто предлагаю, вот и все. –