解构赋值中的打字稿松散类型
Posted
技术标签:
【中文标题】解构赋值中的打字稿松散类型【英文标题】:Typescript loose typing in destructuring assignment 【发布时间】:2018-06-08 23:03:01 【问题描述】:当使用解构赋值和变量作为属性名称时,Typescript 似乎失去了类型。
interface O
[val: string]: string;
const o: O =
foo: ''
;
const f = (name: string) =>
const [name]: value = o;
// now `value` has type any, how to make it type `string`?
const value1 = o[name] || '';
// and `value1` has correct type `string`
;
【问题讨论】:
这实际上看起来像是 TypeScript 中的一个错误,我建议你在他们的问题中搜索,如果没有找到,请打开一个。 是a bug。 我遇到了 Angular 2 的一些问题。如果您尝试从对象表示法分配,则类型会变得混乱。 【参考方案1】:我不认为这是打字稿的错误,这段代码有一些问题
const [name]: value = o ;
这一行是什么,你定义了一个没有名字的 const,然后使用 type 之类的东西并分配 o
还有value
是什么?
由于我不知道你的想法是什么,我可以建议这些代码:
如果你想把它当作类型
const x : [name:string]:string = o;
如果你想用它作为值
const x = [name] : 'my value';
【讨论】:
【参考方案2】:编辑:
再想一想,很明显两种情况都应该返回相同的结果,并且打字稿可能没有考虑对象的可能原型。所以它应该返回字符串类型。
而且你必须保护丢失条目和可能的非字符串原型访问这两种情况。
原文:
解构的值是string
,可以是任何字符串,包括__proto__
或constructor
em> 这将导致非 string
类型。
如果您知道您可能拥有的可选键,那么这将起作用:
const f = (name: keyof typeof o) =>
const [name]: value = o;
// now `value` has type string
;
我认为该错误在后一个示例中没有解构。通过传递某些字符串,您可能会得到一个非 string
值。
【讨论】:
以上是关于解构赋值中的打字稿松散类型的主要内容,如果未能解决你的问题,请参考以下文章