Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript在解构赋值中的松散键入_Typescript_Types_Destructuring - Fatal编程技术网

Typescript在解构赋值中的松散键入

Typescript在解构赋值中的松散键入,typescript,types,destructuring,Typescript,Types,Destructuring,当使用解构赋值和变量作为属性名时,Typescript似乎丢失了类型 接口O{ [val:string]:字符串; } 常数o:o={ foo:“” }; 常量f=(名称:字符串)=>{ 常量{[name]:值}=o; //现在'value'具有any类型,如何使其成为'string'类型? 常量值1=o[名称]| |“”; //并且'value1'具有正确的'string'类型` };我不认为typescript是一个bug,这段代码有一些问题 const {[name]: value} =

当使用解构赋值和变量作为属性名时,Typescript似乎丢失了类型

接口O{
[val:string]:字符串;
}
常数o:o={
foo:“”
};
常量f=(名称:字符串)=>{
常量{[name]:值}=o;
//现在'value'具有any类型,如何使其成为'string'类型?
常量值1=o[名称]| |“”;
//并且'value1'具有正确的'string'类型`

};我不认为typescript是一个bug,这段代码有一些问题

const {[name]: value} = o ;
这一行是什么,定义一个没有名字的常量,然后使用类型和赋值o之类的东西

还有什么是

因为我不知道你的想法是什么,我可以建议以下代码:

如果您想将其视为类型

const x : {[name:string]:string} = o;
如果要将其用作值

const x = {[name] : 'my value'};
编辑:

仔细考虑之后,很明显,这两种情况都应该返回相同的结果,typescript可能没有考虑对象的可能原型。所以它应该返回字符串类型

您必须保护丢失条目和可能的非字符串原型访问这两种情况

原件:

给定给分解结构的值是一个
字符串
,可以是任何字符串,包括将导致非
字符串
类型的
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

如果您知道您可能拥有的可选密钥,那么这将起作用:

const f = (name: keyof typeof o) => {
    const {[name]: value} = o;
    // now `value` has type string
};

我认为后一个例子中的bug没有进行分解。通过传递某些字符串,您可能会得到一个非
字符串
值。

这实际上看起来像是TypeScript中的一个bug,我建议您搜索它们的问题,如果没有找到,请打开一个。它是。我对angular 2有一些问题。如果您尝试从对象符号分配类型,则类型会变得混乱。