首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型“”{}“”上不存在属性“”joiner“”

类型“”{}“”上不存在属性“”joiner“”
EN

Stack Overflow用户
提问于 2021-10-20 12:21:03
回答 1查看 26关注 0票数 0

尝试设置状态是tsx,但是当我尝试从json打开数据时,我得到了这个错误。

Property 'joiner' does not exist on type '{}'. TS2339

下面是组件(删除了无用的代码)

代码语言:javascript
复制
import Player from '../components/Player'

import listingData from '../libs/listingData'

const Battle = () => {
    const [loading, setLoading] = useState(false);
    const [creatorState, setCreator] = useState({ health: 100, animate: false, recieve: false });
    const [opponentState, setOpponent] = useState({ health: 100, animate: false, recieve: false });
    const [data, setData] = useState({});

    const loadBattle = () => {
        setLoading(true);
        const id = parseInt((window.location.pathname).replace("/battle/", ""));
        setData(listingData[id])

        setLoading(false);
        setTimeout(() => triggerAttack("creator"), 5000);
    }

    useEffect(() => {
        loadBattle();
    }, [])

    return (
        <Root>
            <Player 
                weakness={loading ? '' : data.joiner.weakness} //Error triggered here
                image=""
                status="filled"
                price={2352.54}
                health={`${creatorState.health}%`}
                creator={false}
                recieve={creatorState.recieve}
                animate={creatorState.animate}
                loading={loading}
            />
        </Root>
    )
}

export default Battle

播放器组件属性都设置为any

json中的对象示例

代码语言:javascript
复制
        price: 5251.52,
        status: 'filled',
        creator: {
            weakness: 'wind',
            address: '',
            image: '',
        },
        joiner: {
            weakness: 'water',
            address: '',
            image: '',
        },
    },

我对typescript非常陌生,所以我不熟悉类型,它说我没有足够的细节,所以这就是我写的。

EN

回答 1

Stack Overflow用户

发布于 2021-10-20 12:28:37

在这种情况下,您必须使用包含预期数据结构的接口键入状态。像这样:

示例:

代码语言:javascript
复制
interface IUser {
  name: string;
}
const [user, setUser] = useState<IUser>({name: 'Jon'});

代码语言:javascript
复制
interface Provider {
  connected: boolean;
  type: string;
}
const [wearablesList, setWearablesList] = useState<Provider[]>([]);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69645898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档