reactjs 如何在Typescript中检查传递的类型?

czfnxgou  于 2023-04-29  发布在  React
关注(0)|答案(2)|浏览(67)

如果Tstring | undefined,则不需要json解析,而是返回字符串本身。我该如何实施?

import { useEffect, useState, Dispatch, SetStateAction } from 'react'

type SetValue<T> = Dispatch<SetStateAction<T>>

export default function useLocalStorage<T>(
    key: string,
    fallbackValue: T
): [T, SetValue<T>] {
    const [value, setValue] = useState<T>(() => {
        console.log('key', key)
        if (typeof localStorage !== 'undefined') {
            const stored = localStorage.getItem(key)
            console.log('stored', stored)
            return stored ? JSON.parse(stored) : fallbackValue // <-- here
        } else {
            return fallbackValue
        }
    })

    useEffect(() => {
        if (typeof localStorage !== 'undefined' && value) {
            localStorage.setItem(key, JSON.stringify(value))
        }
    }, [key, value])

    return [value, setValue]
}
fnx2tebb

fnx2tebb1#

function isStringOrUndefined<T>(value: T): value is string | undefined {
    return typeof value === 'string' || typeof value === 'undefined'
}
m3eecexj

m3eecexj2#

你需要一个类型 predicate :

function isString(value: any): value is string {
    return typeof value === 'string';
}

我们可以添加到你的条件:

return stored ? isString(fallbackValue) ? stored : JSON.parse(stored) : fallbackValue;

TSPlayground

相关问题