在TypeScript中将字符串转换为对象?

5
我正在尝试使用Is-Valid-Glob来验证一个glob表达式,它接受字符串和数组。需要验证的值是从文本字段中接收到的。问题在于,如果我们传递一个无效的glob表达式,它会产生错误的结果,因为每个输入都被视为字符串。例如:如果用户输入[](无效的glob),它将被分配给模型变量作为字符串'[]',并且对'[]'而不是[]值进行验证。 有没有办法将字符串变量的值转换为对象变量(仅应该更改类型)并进行验证? PS:我正在使用Angular 2。

1
请考虑阅读 如何提问 以发布有效且高质量的帖子。 - Aravind
请与我们分享示例。 - Vala Khosravi
你尝试过使用 eval 吗? - Deepak Jha
3个回答

6
您可以使用JSON.parse将字符串转换为对象:
     var x = require('is-valid-glob');
     var y = '[]';//'foo/*.js' any user provided string
     // this will check if the user has provided an array object if so it 
     //will do a json.parse to remove the '' and then verify the string for a glob.
     x(y[1] !== '['?y:JSON.parse(y));

嗨@Vikramjit,我正在使用类似的hack来达到目的。寻找更令人满意的解决方案。此外,需要添加{}(无效的glob)的情况,它将在这种情况下通过。 - Akshay

3

尝试使用eval,它用于将字符串转换为等效对象,例如:

var a="[]";
console.log(a);// this will print "[]" as a string.
console.log(eval(a));// this will print an array object. With 0 length array object.

谢谢,@deepak,eval在字符串情况下是无效的。例如“foo / *.js”(有效的glob)。 - Akshay

-2
我们可以使用 Object.assign({},object) 将字符串转换为对象。

不起作用。如果是字符串,则将该字符串拆分为一个数组,其中每个元素都是该字符串中的单个字符。 - Noam Gal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接