半天掌握TypeScript,感觉就像写Java

thbcm阅读(407)

文章来源于公众号:小姐姐味道

前端那么多酷炫的东西,真是太好玩了。但是,JavaScript 是个拦路虎,尤其是熟悉了 Java 之类的强类型检查语言之后,每次看到 JavaScript 都感觉不爽。作为一个后端,写 JavaScript 真的是有一种写吐了的感觉。万幸现在有了更好的选择。

为什么要学习 TypeScript 呢?因为它的语法和 Java 真的很像。有了这个东西,就可以摆脱恼人的 JavaScript ,拥抱前端的技术栈。

TypeScript是JavaScript的超集。意思就是在ts中可以直接书写js。在我的第一感觉里,js就像是编译后的可执行文件,而ts就像是Java语言,或者Scala语言等。不过,这也只是类比而已,ts中的很多语法,其实大多数是编译期用的,在真正的js文件里,抹除了很多的信息。

如上图, ts 文件通过 tsc 编译器,生成普通的 js 文件。接下来,就可以使用 node 命令执行这个普通的 js 文件。

下面是一段简单的 ts 代码。是不是和 Java 很像?

class Animal {
    public name;
    protected a;
    private b: string;
    constructor(name) {
        this.name = name;
    }
    sayhi() {
        return `my name is ${this.name}`;
    }
}
class Cat extends Animal {
    constructor(name) {
        super(name)
    }
    sayhi() {
        return "meow " + super.sayhi()
    }
    static iaAnimal(a) {
        return a instanceof Animal;
    }
}
function gen<T extends Animal>(name: T): void {
    console.log(name.name)
}

下面简单介绍一下一些基本的语法,当然了,有些语法是ES6的,但我也把它揉在一块了。

类型相关

由于js是一门弱类型的语言,有很多的运行时转换,就不能使用类似于 Java 一样的强类型转换方式,所以typescript可以在编译阶段通过语言特性增强一些类型检查的功能。而在运行时,大多数根本就没有这样的判断,所以ts更像是一个过程工具。

对于一门语言来说,肯定离不开基本数据类型和自定义类型。 ts 提供了一系列的关键字作为特殊类型代号,其他的都好说,唯一让我有点兴趣的是联合类型,这非常有趣的一个特性。

  • typeof 关键字用于判断是否是某种类型
  • string 表明是字符串类型,它不同于Java,首字母是小写
  • boolean 和 Boolean类型是不同的
  • number 直接表示数字类型,没有那么多麻烦的精度问题(0b、0O、0x指明进度问题)
  • any 是万能类型,相当于Java中的Object,全部是any相当于是普通js。所以,如果你恨ts,就可以一路any到天明
  • never 表示那些永不存在的值类型
  • object 表示非原始类型,和Java中的不太一样
  • string | number 类似这样的是联合类型,这也是非常神奇的一点。这里只允许这两种类型的转换,并且能调用的方法,要取两者交集
  • ` 之间的字符串可以使用类似shell的语法,做模版${}`
  • readonly 这竟然是个关键字,表明只读属性
  • [propName: string]: any; 这一行代码值得研究,但不推荐这么做
  • number[] 数组和Java类似,不过这是声明后置的语法,值使用[]声明,而不是{}
  • function 函数和javascript的没什么区别,有两种声明方式。lambda对js来说肯定是强项
  • =>的语法也比较恶心人,和ES6联合起来可以写一大篇文章
  • ...rest 注意这个东西!类似Java中变参的意思
  • as 是一个关键字,我们可以理解为Java的cast,但它也仅仅是语法检查而已,运行时并无法控制。(window as any)很酷,但容易出错

声明相关

  • let 用来声明普通变量,作用域小,{}之内
  • var 作用域大,函数级别或全局
  • const 只读变量,是静态的;readonly却是动态的,只不过声明后不能改而已
  • declare var 声明全局变量( .d.ts后缀的文件,这是一种约定)
  • declare function 声明全局方法
  • declare class 全局类
  • declare enum 全局枚举类型
  • declare namespace 全局命名空间
  • export 这个主要是用于npm的,后续可以使用import导入

那什么是declare呢?私以为这个类似于python中的__init__.py文件,用于暴露一些接口和函数,另外为代码自动补全提供了基本数据。

两个默认的约定。配置了tsconfig.json以后,可以直接执行tsc命令进行编译。///三斜杠指令,很丑。

关于Class

从Java过来的同学,会发现这些概念和Java是类似的,不过ts的语法更加简单。

  • get set 竟然是关键字,后面可直接跟上函数。可以改变属性的赋值和读取行为!
  • static、instanceof、public、protected、private这些也都是有的,真的感觉和写Java没什么两样
  • constructor 默认是构造方法,不像是Java要和class的名词一样
  • abstract 也有,表明子类必须实现,没什么两样
  • 关于类和接口的区别,我觉得熟悉java的,对ts来说就是透明的
  • 范型在Java里,语法也是非常的变态,因为你很多时候不知道要把<>放在什么地方。在ts中,一样的难受。具体怎么熟悉,只有在实践中磨练了

关于type、interface、class

  • interface 定义了接口,这里的接口有意思,可以声明实体,但是必须全部赋值才行。可以通过在成员变量前面加?的方式来表明非必须,但很丑; ?也可以定义函数的可选参数,6的很
  • type 和interface一样,在编译时,会被抹除。两者语法有细微差别,同时type可以定义更多类型,比如基本类型、联合类型、元组等
  • class 可以在里面实现方法,有点Java的味道了,所以不会被编译器抹除。javascript使用构造函数模拟class。

开发工具

tsc是typescript的编译器。如果编译出错,可以指定底层的语法特性。

tsc --target es6

建议配置在tsconfig.json文件里,会被自动识别。

{
    "compilerOptions": {
        "module": "commonjs",
        "outDir": "lib",
        "declaration": true,
        "target":"es6"
    }
}

vscode,通过.d.ts文件,可以做到自动补全和语法检查。但针对于复杂的个性化配置,还是无法做到类似idea那样智能的提示和配置。

由此造成的后果就是,手头上必须有一份参考文档,并对参考文档的目录和功能熟悉。在遇到相应的配置参数时,不得不翻阅到相应的地方,然后拷贝过来。这对于一个 javaer 来说,实在是太痛苦了。

以上就是W3Cschool编程狮关于半天掌握TypeScript,感觉就像写Java的相关介绍了,希望对大家有所帮助。

VS Code 十个你需要知道的使用技巧

thbcm阅读(440)

文章来源于公众号:淘系前端团队 ,作者梧忌

经常帮一些同学 One-on-One 地解决问题,在看部分同学使用 VS Code 的时候,有些蹩脚,实际上一些有用的技巧能够提高我们的日常工作效率。

一、重构代码

VS Code 提供了一些快速重构代码的操作,例如:

将一整段代码提取为函数:选择要提取的源代码片段,然后单击做成槽中的灯泡查看可用的重构操作。代码片段可以被提取到一个新方法中,或者在不同的范围内(当前闭包、当前函数内、当前类中、当前文件内)提取到一个新函数中。在提取重构期间,VS Code 会引导为该函数进行命名。

将表达式提取到常量:为当前选定的表达式创建新的常量。

移动到新的文件:将指定的函数移动到新的文件,VS Code 将自动命名并创建文件,且在当前文件内引入新的文件。

转换导出方式:export const name 或者 export default。

合并参数:将函数的多个参数合并为单个对象参数:

参考: 重构操作(code.visualstudio.com/docs/editor/refactoring)、JS/TS 重构操作(code.visualstudio.com/Docs/languages/typescript#_refactoring)

二、自定义视图布局

VS Code 的布局系统非常灵活,可以在工作台上的活动栏、面板中移动视图。

参考:重新排列视图(https://code.visualstudio.com/updates/v1_45?ref=codebldr#_dynamic-view-icons-and-titles)

三、快速调试代码

在 VS Code 内调试 JS/TS 代码非常简单,只需要使用 Debug: Open Link 命令即可。这在调试前端或 Node 项目时非常有用,这类型的项目通常会启动一个本地服务,这时候只需要将本地服务地址填写到 Debug: Open Link 输入框中即可。

参考:Debug(https://code.visualstudio.com/docs/editor/debugging)

四、查看和更新符号的引用

查看符号的引用、快速修改引用的上下文:例如,快速预览某个函数在哪些地方被调用了及其调用时上下文,还可以在预览视图中更新调用上下文的代码。

重命名符号及其引用:接着上面的例子,如果想更新函数名以及所有调用,怎么实现?按 F2 键,然后键入所需的新名称,再按 Enter 键进行提交。符号的所有引用都将被重命名,该操作还是跨文件的。

参考:Peek(https://code.visualstudio.com/docs/editor/editingevolved#_peek)、Rename Symbol(https://code.visualstudio.com/docs/editor/editingevolved#_rename-symbol)

五、符号导航

在查看一个长文件的时候,代码定位会是非常痛苦的事情。一些开发者会使用 VS Code 的小地图,但其实还有更便捷的方法:可以使用 ⇧⌘O 快捷键唤起符号导航面板,在当前编辑的文件中通过符号快速定位代码。在输入框中键入字符可以进行筛选,在列表中通过箭头来进行上下导航。这种方式对于 Markdown 文件也非常友好,可以通过标题来快速导航。

参考:Go to Symbol(https://code.visualstudio.com/docs/editor/editingevolved#_go-to-symbol)

六、拆分编辑器

当对内容特别多的文件进行编辑的时候,经常需要在上下文中进行切换,这时候可以通过拆分编辑器来使用两个编辑器更新同一个文件:按下快捷键 ⌘\ 将活动编辑器拆分为两个。

可以继续无尽地拆分编辑器,通过拖拽编辑器组的方式排列编辑器视图。

参考:Side by side editing(https://code.visualstudio.com/docs/getstarted/userinterface#_side-by-side-editing)

七、重命名终端

VS Code 提供了集成终端,可以很方便地快速执行命令行任务。用得多了经常会打开多个终端,这时候给终端命名可以提高终端定位的效率。

参考:Rename terminal sessions(https://code.visualstudio.com/docs/editor/integrated-terminal#_rename-terminal-sessions)

八、Git 操作

VS Code 内置了 Git 源代码管理功能,提供了一些便捷的 Git 操作方式。例如:

解决冲突:VS Code 会识别合并冲突,冲突的差异会被突出显示,并且提供了内联的操作来解决冲突。

暂存或撤销选择的代码行:在编辑器内可以针对选择的行来撤销修改、暂存修改、撤销暂存。

参考:Using Version Control in VS Code(https://code.visualstudio.com/docs/editor/versioncontrol)

九、搜索结果快照

VS Code 提供了跨文件搜索功能,搜索结果快照可以提供更多的搜索结果的信息,例如代码所在行码、搜索关键字的上下文,并且可以对搜索结果进行编辑和保存。

参考:Search Editors(https://code.visualstudio.com/updates/v1*43#*search-editors)

十、可视化搭建页面

在 VS Code 中可以通过可视化搭建的方式生成 Web 页面,这是通过安装 VS Code 的 Iceworks(https://marketplace.visualstudio.com/items?itemName=iceworks-team.iceworks) 插件实现的。安装插件后,通过 ⇧⌘P 唤起命名面板,在命令面板中输入『可视化搭建』即可唤起可视化搭建界面,在界面内通过选择网页元素、进行拖拽布局、设置元素样式和属性来搭建页面,最后点击『生成代码』就可以生成 React 代码。

以上就是W3Cschool编程狮关于VS Code 十个你需要知道的使用技巧的相关介绍了,希望对大家有所帮助。

五个有用的 CSS 属性被我忽视了

thbcm阅读(433)

文章来源于公众号:前端瓶子君
作者 | Desiré
译者 | 苏本如,责编 | 郭芮
出品 | CSDN(ID:CSDNnews)

各位网友,大家好! 今天,我想在这里和大家分享一些我很晚时候才知道的一些CSS属性,在此之前,没有人告诉我这些属性的存在。 也许你们和我不一样,已经了解了这些属性。 闲话少说,让我们进入正题吧:

1. 禁用用户选中一个元素(element)的文本

使用属性 user-select,并且将它的值设置为 none ,我们可以将一个元素的文本设置为不能被用户选中。

element {
  -webkit-user-select: none; /* Safari */
  -ms-user-select: none; /* IE 10+ and Edge */
  user-select: none; /* Standard syntax */
}

当你不想一个元素的原始内容被复制时,可以使用这个属性。

2. 更改选中文本的背景颜色

使用选择器::selection,可以更改选中文本的背景颜色:

::selection {
  color: #ececec;
  background: #222831;
}

当你使用这个属性时,注意使用良好的颜色对比度组合。

3. 在不使用br的情况下将文本换行

使用属性white-space,并将它的值设置为pre-wrap或pre-line:

element {
  white-space: pre-wrap; /*pre-wrap*/
  white-space: pre-line; /*pre-line*/
}

4. 设置字与字之间的间距

这对你来说可能有点简单。但是直到我搜索这个需求时,我才知道有这个设置。

你可以使用word-spacing这个属性来设置文本中词与词之间的间隔。

element {
  word-spacing: 6px; /* word spacing wow such */
}

5. 在浏览器中隐藏难看的滚动条

我以前甚至不知道这是可以做到的。

要实现这个目的,你必须为不同的浏览器,准备不同的代码:

/* Hide scrollbar for Chrome, Safari, and Opera */
html::-webkit-scrollbar {
  display: none;
}


/* Hide scrollbar for IE and Edge */
html {
  -ms-overflow-style: none;
}

如果你禁用了滚动条,那么你需要确保提供上/下按钮和其他方便的导航选项。请注意,Firefox停止了对滚动条隐藏问题的支持,以上代码似乎是一个技巧,可以执行与我包含的其他代码相同的功能。

以上就是W3Cschool编程狮关于五个有用的 CSS 属性被我忽视了的相关介绍了,希望对大家有所帮助。

鸿蒙2.0!前端开启新大陆?

thbcm阅读(404)

文章来源于公众号:前端之露 作者:露痴

9月10日,华为开发者大会如期而至。大会分享了 HMS Core 5.0的 最新进展。

前置知识

什么是鸿蒙

鸿蒙系统(鸿蒙OS,HarmonyOS)是第一款基于微内核的全场景分布式 OS,由华为公司自主研发并开源(开源的不是HMS框架是系统)。官网:https://developer.harmonyos.com/ 。

可见的未来?

整个大会一直在强调的是 HM OS 2.0 的分布式解决方案,打通了 PC、手表和车机等产品终端,第一个版本支持128K-128M设备上运行。这是统治世界(物联网)的节奏。

![版本支持128K-128M设备上运行](https://atts.w3cschool.cn/attachments/image/20200911/1599803613436772.jpg “版本支持128K-128M设备上运行”)

发布会上提到的强大的跨终端业务协同能力真的还是比较心动的。最重要的是这个是基于系统级别的!小编是不太敢预测个未来啊什么的。但是对于一个常年无法摆脱 apple 的人来说非常清楚是生态绑架了我。

做为一名前端开发者,最关心的莫过于我们能不能也体验一把国之荣光!下图可以看到方舟编译器括号里面写着大大的两个字 JS,不禁有些飘飘然~

![平台工具链与生态](https://atts.w3cschool.cn/attachments/image/20200911/1599803693960259.jpg “平台工具链与生态”)

![方舟编译器](https://atts.w3cschool.cn/attachments/image/20200911/1599803722311530.jpg “方舟编译器”)

JS 应用开发框架

那就来一起看看底层原理(官方文档)。

作为 JS 应用开发框架的轻量实现,鸿蒙提供一套跨平台的类 web 应用开发框架,通过 Toolkit 将开发者编写的 HTML、CSS 和 JS 文件编译打包成 JS Bundle ,然后再将 JS Bundle 解析运行成 C++ UIKit 的 View 组件进行渲染。

通过支持三方开发者使用声明式的 API 进行应用开发,以数据驱动视图变化,避免了大量的视图操作,大大降低了应用开发难度,提升开发者开发体验。

![JS 应用开发框架](https://atts.w3cschool.cn/attachments/image/20200911/1599803794839279.png “JS 应用开发框架”)

JS 应用框架实现主要包含两部分,native 和 JavaScript 。

native 部分为 C++,为框架的主体实现。

JavaScript 部分实现提供 JS 应用框架对用户 JS 文件的运行时支持,并通过向引擎暴露一些全局方法或对象,支撑 JS 运行时与 native 框架之间的交互。

想要用 JS 来开发一个APP 就要去研究一下下面的两个库啦!

![两个库](https://atts.w3cschool.cn/attachments/image/20200911/1599803878340692.jpg “两个库”)

组件化开发方式

鸿蒙贴心的提供了命令行工具

$ npm install -g @ohos/hpm-cli # 安装命令行工具
$ hpm init -t default # 进入开发目录,采用默认模板创建一个开发项目。
$ hpm install @ohos/demo # 安装组件

官方组件包:hpm.harmonyos.com/#/cn/home

![官方组件包](https://atts.w3cschool.cn/attachments/image/20200911/1599803929582156.jpg “官方组件包”)

IDE

DevEco 提供了一站式开发/编译/调试/烧录,集成了分布式能力,以及可灵活组装的丰富的组件,并且内置安全检查能力。

![一站式开发](https://atts.w3cschool.cn/attachments/image/20200911/1599803973852664.jpg “一站式开发”)

目前只支持 windows 系统(用Mac的表示很无奈),下载地址:device.harmonyos.com/cn/ide

![HUAWEI DecEco Device Tool](https://atts.w3cschool.cn/attachments/image/20200911/1599804210366452.jpg “HUAWEI DecEco Device Tool”)

![HUAWEI DevEco 2.0](https://atts.w3cschool.cn/attachments/image/20200911/1599804254940792.jpg “HUAWEI DevEco 2.0”)

以上就是W3Cschool编程狮关于鸿蒙2.0!前端开启新大陆?的相关介绍了,希望对大家有所帮助。

他来了,为大模型量身定制的响应式编程范式(1) —— 从接入 DeepSeek 开始吧

thbcm阅读(420)

首先,进入老生常谈的环节 —— 准备环境。进入
FIT-Framework 项目地址,下载项目代码。根据
入门指南,你可以快速部署 FIT 环境,并参考 FEL 的指导手册,掌握 FEL 模块的强大功能。FEL 模块不仅支持 DeepSeek 的接入,还能支持任何符合 OpenAI API 标准的大模型。此外,它还提供了丰富的工具和大模型操作原语,帮助你快速构建智能应用。️

万字调研——AI生成内容检测

thbcm阅读(417)

摘要:深度伪造(deepfakes)、合成或篡改媒体的威胁正变得越来越令人担忧,尤其是对于那些已经被指控操纵公众舆论的社交媒体平台而言。即使是最简单的文本生成技术(例如查找和替换方法)也能欺骗人类,正如2017年的“网络中立性”丑闻所证明的那样。与此同时,从基于RNN的方法到GPT-2语言模型,更强大的生成模型已经发布。最先进的语言模型,特别是基于Transformer的模型,可以在接收到任意输入后生成合成文本。因此,开发能够帮助检测媒体真实性的工具至关重要。为了支持这一领域的研究,我们收集了一个真实的深度伪造推文数据集。这里的“真实”指的是每条深度伪造推文都确实发布在Twitter上。
我们总共收集了23个机器人账号的推文,这些机器人模仿了17个人类账号。这些机器人基于各种生成技术,包括马尔可夫链、RNN、RNN+马尔可夫、LSTM和GPT-2。
我们还从被机器人模仿的人类账号中随机选取了推文,以确保数据集的整体平衡性,最终数据集包含25,836条推文(一半是人类发布的,一半是机器人生成的)。该数据集已在Kaggle上公开。为了在提出的数据集上为检测技术建立坚实的基线,我们测试了13种基于各种最先进方法的检测方法。使用这13种检测方法报告的基线检测结果证实,基于Transformer架构(如GPT-2)的最新、更复杂的生成方法能够生成高质量的短文本,难以被检测出来。

联系我们