Ваш синтаксис правильный, но использование контекста недостаточно тщательно, чтобы гарантировать, что при деконструкции значение не равно undefined
.
Сама ошибка проверяется параметром компилятора strictNullChecks
, ваш код будет работать в своем текущем состоянии, если в вашем tsconfig установлено strictNullChecks: false
.
Однако, чтобы сохранить эту опцию включенной, вам нужно будет убедиться, что значение контекста не равно undefined
, прежде чем деконструировать или использовать StepContext
значений, Typescript не позволит вам получить к нему доступ без предварительной проверки.
Если вы измените деконструкцию на простое присвоение, а затем убедитесь, что контекст не undefined
, ошибка исчезнет go.
const stepContext = React.useContext(StepContext);
if (typeof stepContext !== "undefined") {
stepContext.setStep("foo")
}
// simplified
if (stepContext) {
stepContext.setStep("foo")
}
// simplified further
stepContext?.setStep("foo");
Кроме того, с помощью strictNullChecks: false
вы также можете определять тип контекста без значения типа undefined
.
export const StepContext = createContext<Context>(undefined);