Typescript强类型语言的一些猜想
Opened this issue · 1 comments
axetroy commented
从以前旧博客迁移至此
2016-04-07 21:46:42
Typescript是javascript的超集,并且是可以实现强类型的语言。
而且书写方式类似与后台语言,要写接口interface来限定类型。
然后编译成javascript。
javascript是动态类型语言,是弱类型,意味着变量不需要声明类型,不用限制变量的类型,它可以是数字,可以是字符串,可以是对象等等。
好处就是,书写javascript很轻松,坑的地方就是,变量的类型可以改变,可能会引发一些未知的bug。
而在2015年发布了ECMA5,并且以后每年都会发布新版本.
逐渐的模块话,类,以及ECMA7的装饰,正在实现一些javascript预编译的功能,而coffeeScript还没会,就已经被抛弃了。
不禁想,每年一个版本,而且nodejs让javascript可以编写后台,那么以后javascript会不会出现强类型?多线程之类的?
就关于强类型,我处于好奇,写了一段小代码。意在实现javascript的强类型。
代码如下
function proxy(obj) {
return function(attr, typeLimit) {
let origin = obj[attr];
const type = Object.prototype.toString.call(typeLimit);
Object.defineProperty(obj, attr, {
set: function(newVal) {
const newValType = Object.prototype.toString.call(newVal);
if (type !== newValType) {
console.error(
'TypeError:The attr [%s] is only match with %s, not %s',
attr,
type,
newValType
);
} else {
origin = newVal;
return newVal;
}
},
get: function() {
return origin;
}
});
};
}
使用方式:
let p = proxy(target);
p('a', 1); // 限制为数字
target.a = 321; // 能正确赋值
console.log(target.a); // 321
target.a = 'hello world'; // TypeError:The attr [a] is only [object Number], not a [object String]
console.log(target.a); // 321
// 限制为字符串
p('b', 'a');
// 限制为数组
p('c', []);
看起来有些繁琐
alsotang commented
这个 proxy 函数遇到非 Primitive 的类型就懵逼了