代码之家  ›  专栏  ›  技术社区  ›  merry-go-round

find函数方法中的对象可能是“undefined”Typescript

  •  -1
  • merry-go-round  · 技术社区  · 4 年前

    我真的不知道如何捕捉错误。有人能帮我吗?

    如果你有更好的解决方案(如果有什么看起来更好,那也很棒)

    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.
    ...
    
    0 回复  |  直到 4 年前
        1
  •  1
  •   SUMIT PATRO    4 年前

    尽量使用简化/可读的代码,以便读者能够理解。 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'}]);
    
        2
  •  0
  •   Paul-Louis Mas    4 年前

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

    const { prevCases } = this.props;
    

    与以下内容相同:

    const prevCases = this.props.prevCases;
    

    Typescript不知道 props ,所以它不知道该物业 prevCases 如果存在,您需要明确地告诉Typescript 道具 参数的类型为 Props 。为此,您需要在函数声明中声明类型如下:

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

    这样,无论发生什么,Typescript都会被使用 道具 参数的类型始终为 道具