Javascript typescript中的对象分解

Javascript typescript中的对象分解,javascript,reactjs,typescript,object,object-destructuring,Javascript,Reactjs,Typescript,Object,Object Destructuring,有没有可能在没有Typescript抱怨的情况下对来自函数调用的对象进行解构 文件1 反应组分1 。。。 设obj=null//{ obj=functionCall(…)/为obj指定类型: 让obj:null |{key1:sometype;key2:sometype;}=null; 请注意,由于obj的值可能为null,因此在该分解赋值周围需要一个保护或默认值: if (obj) { const { key1, key2 } = obj; } 或 或 后两者之间的区别在于,如

有没有可能在没有Typescript抱怨的情况下对来自函数调用的对象进行解构

文件1

  • 反应组分1
。。。
设obj=null//{

obj=functionCall(…)/为
obj
指定类型:

让obj:null |{key1:sometype;key2:sometype;}=null;
请注意,由于
obj
的值可能为
null
,因此在该分解赋值周围需要一个保护或默认值:

if (obj) {
    const { key1, key2 } = obj;
}


后两者之间的区别在于,如果
obj
不是
null
,但是
key1
key2
具有
未定义的值(如果类型允许)。

指定
obj
的类型:

让obj:null |{key1:sometype;key2:sometype;}=null;
请注意,由于
obj
的值可能为
null
,因此在该分解赋值周围需要一个保护或默认值:

if (obj) {
    const { key1, key2 } = obj;
}


最后两种方法的区别在于,如果
obj
不是
null
,但是
key1
key2
具有
未定义的值(如果类型允许的话)。

useEffect在初始渲染后运行-因此在第一次渲染时,obj将为null,因此TS有权投诉

在分解结构之前,您需要检查obj是否为null

typemytype={key1:string;key2:number;};//例如
设obj:MyType | null=null;
如果(obj){
常量{key1,key2}=obj;//确定
}否则{
//在这里,obj是空的
}

useEffect在初始渲染后运行-因此在第一次渲染时,obj将为空,因此TS有权投诉

在分解结构之前,您需要检查obj是否为null

typemytype={key1:string;key2:number;};//例如
设obj:MyType | null=null;
如果(obj){
常量{key1,key2}=obj;//确定
}否则{
//在这里,obj是空的
}

声明了
obj
然后由
useffect
回调填充看起来像是一个错误。它可能不是一个,但看起来像一个。有关详细信息,请参阅和。根据该
obj
声明的位置,每次运行组件函数时都会重新创建它,或者在组件之间共享它组件的所有实例。两者都似乎有问题。该对象是应用程序全局状态的一部分,设置为“null”,我使用useEffect使用graphql调用中的默认值更新状态,因为这些默认值将来可能会更改。声明了
obj
,然后由
useEffect
callba填充ck看起来像是一个错误。它可能不是一个,但看起来像一个。有关详细信息,请参阅和。根据
obj
声明的位置,它要么在每次组件函数运行时重新创建,要么在组件的所有实例之间共享。两者似乎都有问题。对象是全局状态的一部分对于应用程序,设置为“null”,我使用useEffect使用graphql调用的默认值更新状态,因为这些默认值将来可以更改。
const { key1 = defaultForKey1, key2 = defaultForKey2 } = obj ?? {};