javascript - TypeScript-fel: Egenskapen 'scrollIntoView' finns inte på typen 'never'. TS2339


I min komponent har jag följande kod för att scrolla till botten av sidan:

const el = useRef(null);

useEffect(() => {
    if (el.current === null) { }
    else
        el!.current!.scrollIntoView({ block: 'end', behavior: 'smooth' });

    if (props.loading != true)
        props.fetchFeedbackTaskPageData(submissionId);

}, [])

Denna el-referens är kopplad till en div (i botten av sidan) på detta sätt:

<div id={'el'} ref={el}></div>

Men jag får följande fel:

Egenskapen 'scrollIntoView' finns inte på typen 'never'. TS2339

När jag inte använde ! fick jag detta fel:

Objektet är eventuellt 'null'. TS2531

Jag kollade många inlägg om detta problem men såg inte hur man hanterar detta i React när man använder useRef och scrollIntoView. Några idéer?

Svar #1

För alla som läser detta 2020 är det

const el = useRef<null | HTMLDivElement>(null); 

och inte längre:

const el = useRef<null | HTMLElement>(null);

Svar #2

Du måste tala om för useRef vilka typer förutom null den kommer att tilldelas, t.ex. useRef<null | number>(null) eller i ditt fall useRef<null | HTMLElement>(null).

Problemet är att genom att tilldela null som standardvärde till ref, kan TypeScript bara gissa att typen av ref kommer att vara densamma som dess initialvärde (null) - vilket är anledningen till att du får de fel du nämnde. Generellt sett behöver refs inte vara DOM-komponenter, så useRefs typdefinition antar inte att den kommer att tilldelas en sådan.

Relaterade artiklar