Typescript在解构赋值中的松散键入
当使用解构赋值和变量作为属性名时,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} =
接口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有一些问题。如果您尝试从对象符号分配类型,则类型会变得混乱。