资讯专栏INFORMATION COLUMN

TypeScript不利于高级Javascript程序员的修养

weakish / 1359人阅读

摘要:本人验证过一些,得出结论并不是严格的超集。而且微软的东西做广告的成分较大,最好抱着怀疑的态度。微软技术从,,,到,,坑害了一代又一代的程序员,真是毁人不倦。所以玩笑的说,程序员珍爱生命,远离微软。和不同,它属于非侵入式编程。

Typescript完全严格地兼容js吗?

Typescript官方说它是Javascript的超集,好多人也是这么理解的。 本人验证过一些case,得出结论:并不是严格的超集。

例一:

contact.js

function contact() {
    this.name = "Jackie Ge"

    return {
        cname: this.name,
        getCname() {
            return this.cname
        }
    }
}

var c = new contact
console.log(c.cname, c.getCname())

如果是contact.ts, 那么tsc编译的时候出错:
error TS2350: Only a void function can be called with the "new" keyword.

例二:

function Foo() {

}

Foo.array = [1, 2, 3]
Foo.min = function () {
    return Math.min(...this.array)
}

var obj = {
    array: [3, 6, 9]
}
console.log(Foo.min())
console.log(Foo.min.apply(obj))

tsc的时候报错:
error TS2339: Property "array" does not exist on type "() => void".
error TS2339: Property "min" does not exist on type "() => void"

我想说的是,最好总是要做一些实地测试, 不要人云亦云。而且微软的东西做广告的成分较大,最好抱着怀疑的态度。微软技术从COM, VB, JScript, 到WPF, SilverLight,坑害了一代又一代的程序员,真是毁人不倦。目前Typescript又有这个架势。所以玩笑的说,程序员珍爱生命,远离微软。

Typescript优缺点分析

主观的分析TypeScript有其自身的优点:

若类型的静态类型检查。 但这多半是给后端java/C#开发写前端降低门槛, 使之短时间内写出了所谓的前端代码。

ts是为了让新手也能写出不至于太寒碜的代码,便于团队的合作。

但缺点也明显:

有些第三方的js库缺失dts,或者dts更新不及时。会导致不能便利的使用它或者调用了过时的方法/函数

但如果已是熟练的前端开发, TypeScript有时候确实是桎梏。它强制你写一堆繁琐的接口类型。而且有些js的方式它还不兼容 (看我的上面的例子)

它其实阉割了js的一些技法,(还是看我的例子)。要想修炼高手,须要远离ts。所谓可远观而不可近玩焉。

后记

后来仔细想了一番,我对TS的观点确实有那么点偏见,估计由于多年受MS毒害之后的反弹吧。所以在此更正一点认识:

如果只做静态类型检查, 推荐flow check, facebook出品。和TypeScript不同,它属于非侵入式编程。而且react和vue本身的源码都在用。我的理解是,ts开源,但非ES标准。也保不齐以后会加了很多私货而越来越远了ES标准。小公司小项目问题不大,但大公司大项目,fb,阿里巴巴等一般不会用ts,而是用标准ES或者自行开发框架。对于长期的大项目,公司的核心项目等,尽量向标准靠拢吧。

不能凡事都依赖智能提示吧,对于自己的项目代码,总得要有合理的规范,总得要记住里面的重点方法名,变量名吧。而且重要的方法名,变量名,命名好之后,推荐要长期保持,而非朝令夕改,而非总想着之后重构。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/83500.html

相关文章

  • 使用TypeScript开发微信小程序

    摘要:使用开发微信小程序基础接口核心设计原则之一就是类型检查,通过使用接口可以进行类型检查,满足传统面向对象思想,利于有效开发,有效避免类型转换问题。使用开发微信小程序基础迭代器为每一个对象定义了默认的迭代器。 使用TypeScript开发微信小程序(1)——基础:数据类型(Type) ​TypeScript 的基本数据类型有boolean、number、string 、array、enum...

    xingpingz 评论0 收藏0
  • ESLint 在中大型团队应用实践

    摘要:自动化接入和升级方案通过命令行工具提供一键接入升级能力,同时集成到团队脚手架中,大大降低了工程接入和维护的成本。原始代码经过解析器的解析,在管道中逐一经过所有规则的检查,最终检测出所有不符合规范的代码,并输出为报告。 引言 代码规范是软件开发领域经久不衰的话题,几乎所有工程师在开发过程中都会遇到,并或多或少会思考过这一问题。随着前端应用的大型化和复杂化,越来越多的前端工程师和团队开始重...

    alogy 评论0 收藏0
  • 2017-07-11 前端日报

    摘要:前端日报精选月份前端资源分享第期打包实战上大漠穷秋全面解读核心特性拖放什么是装饰器应该在什么时候使用装饰器中文全栈工程师的自我修养浓缩笔记下做工程师不做码农常用布局简洁解决方案白底黑字进阶试试酷炫的视角技术周刊期知乎专栏实践当 2017-07-11 前端日报 精选 7月份前端资源分享【第992期】webpack 2 打包实战(上)大漠穷秋:全面解读Angular 4.0核心特性HTML...

    _ivan 评论0 收藏0
  • 切图崽自我修养--[BUILD]构建工具思路梳理

    摘要:前言之前也是从过来的,到现在的中间有些问题没怎么细想,比如明明是构建工具为什么调试总是要开启一个服务之类的,现在就来简单梳理下思路最原始的构建工具无非是这样改动了某个资源文件,要手动运行构建命令才能重新构建,重新构建的时候构建工具将所有资源 前言 之前也是从grunt/gulp/fis/过来的,到现在的webpack,中间有些问题没怎么细想,比如明明是构建工具为什么调试总是要开启一个h...

    wfc_666 评论0 收藏0
  • 切图崽自我修养--[BUILD]构建工具思路梳理

    摘要:前言之前也是从过来的,到现在的中间有些问题没怎么细想,比如明明是构建工具为什么调试总是要开启一个服务之类的,现在就来简单梳理下思路最原始的构建工具无非是这样改动了某个资源文件,要手动运行构建命令才能重新构建,重新构建的时候构建工具将所有资源 前言 之前也是从grunt/gulp/fis/过来的,到现在的webpack,中间有些问题没怎么细想,比如明明是构建工具为什么调试总是要开启一个h...

    elina 评论0 收藏0

发表评论

0条评论

weakish

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<