首页 > 解决方案 > 检查对象是否在 Typescript 中有键并使用该键

问题描述

我有以下代码:

let show = {
    createTag: false,
    updateFeature: false,
    createFeatureGroup: false,
    deleteFeature: false,
    deleteCycle: false,
};

我从查询字符串中得到一个值,我想与 show 的键匹配。

以下代码可以正常工作,但我想要一种方法让 Typescrpt 推断它并避免发出强制转换:

const showDialog = $page.query.get('show') || '';

if (showDialog && showDialog in show) {
    // I want to get rid of the "<keyof typeof show>" cast
    show[<keyof typeof show>showDialog] = true; 
}

我虽然只是发出showDialog in show打字稿会知道在那个ifshowDialog 里面是一个键show,但似乎并非如此。

标签: typescriptobjectcastingkeyhasownproperty

解决方案


您可以创建类型保护:

function isValidParam(k: string): k is keyof typeof show {
  return k in show;
}

const showDialog = $page.query.get('show') || '';

if (isValidParam(showDialog)) {
    show[showDialog] = true; 
}

但你决定是否值得。我个人可能会保留演员阵容。


推荐阅读