查找功能方法中对象可能是“未定义”打字稿

时间:2020-10-22 00:13:50

标签: javascript typescript

我真的不知道如何捕获错误。有人可以帮我吗?

如果您有更好的解决方案(如果看起来更好,那也很好)

interface Props {
    prevCases: Array<Case>
}

export function MyFunction(props) {
  const { prevCases } = this.props;
  const myType = prevCases               << Object is possibly 'undefined'.
    .find((case: Case) => case?.id === myId).resultItems
    ?.find((item: Item) => item.name === myPath)
    ?.type;
  console.log(ArrayA[myType]);    << Type 'undefined' cannot be used as an index type.
...

2 个答案:

答案 0 :(得分:1)

尝试使用简化/可读的代码,以便读者理解。 第一个问题是您无法编写this.prop,它会寻找全局变量,仅用prop代替。 通过使用try catch块调试进一步的问题

interface Props {
    prevCases: any[]
}
let myId = 1;
let myPath = 'abc';
function MyFunction(props : any[]) {
    try {
        const myType = props.filter(prop => prop ? prop['id'] === myId : false)
                            .filter(prop => prop ? prop['name'] === myPath : false); 

        myType.forEach(item => console.log(item['value']));
    }
    catch(Error){
        console.log(Error.message);
    }
}
MyFunction([null,{'id':2,'name':'abc','value':'b'},{'id':1,'name':'abc','value':'c'}]);

答案 1 :(得分:0)

使用对象分解时,属性值可能为undefined

const { prevCases } = this.props;

与以下相同:

const prevCases = this.props.prevCases;

并且Typescript不知道props的类型,因此不知道属性prevCases存在,您需要明确地告诉Typescript props参数是输入Props。为此,您需要这样在函数声明中声明类型:

export function MyFunction(props: Props) {
 // Your function body
}

这样,无论发生什么情况,都将使用Typescript,props参数将始终为Props类型