讲者保哥是 TypeScript 的支持者。议程目的是对还没使用 TypeScript 的开发者进行 promotion。所以对已经在使用 TypeScript 的开发者来说内容比较入门,也比较多是在宣传 TypeScript 的好处。
议程中保哥有介绍到一个在 v4.1 中推出,算是进阶的使用特性。只要为 querySelector 的 function 宣告为型别 - QueryResult,并将 querySelector 的执行结果指派到变数,就能只透过参数传入的 selector,就能推敲出变数的型别。
sample.ts
type QueryResult<T extends string> = MatchEachElement<GetElementNames<T>>;
/**
* Example
*/
declare function querySelector<T extends string>(query: T): QueryResult<T>;
const a = querySelector('div.banner > a.call-to-action')
const b = querySelector('input, div')
const c = querySelector('circle[cx="150"]')
const d = querySelector('button#buy-now')
const e = querySelector('section p:first-of-type');
sample.d.ts
declare const a: HTMLAnchorElement | null;
declare const b: HTMLDivElement | HTMLInputElement | null;
declare const c: SVGCircleElement | null;
declare const d: HTMLButtonElement | null;
declare const e: HTMLParagraphElement | null;
不过透过这个例子,保哥也强调,学习 TypeScript 并不是要成为语言学家。有实务需求再去学就好,掌握基本特性就够日常开发。
讲者 Jeremy 跟保哥的立场相反,反对在专案中导入 TypeScript。他先列出 TypeScript 看似不错的优点 -
这里提到一个名词 Soundness(健全性)。在符合 Soundness 的型别系统中,不会在编译或执行时 出现表达式与预期型别不匹配的情况。
而 Soundness 是有分级别的。以 TypeScript 来说,他算是具有一定程度的健全性。例如以下程序是可以捕捉到的错误
const increment = (i: number): number => {
returni + '1';
};
const countdown: number = increment('98765432');
不过 TypeScript 也很明确提出 100% Soundness 不是他的目标,也就是他不能保证变数在执行时具有定义的型别。例如
interface A {
x: number;
}
let a: A = { x: 3 };
let b: { x: number | string } = a;
b.x = 'unsound';
let x: number = a.x; // unsoundness
a.x.toFixed(0); // what?
上面的程序码是不正确的,因为从 A 介面中可知 a.x 应该是一个数字。不幸的是,经过一些重新赋值後,它最终以一个字串的形式出现,并且後面的程序码能通过编译,但会在执行时出错。
尤其如果使用 TypeScript 的 any,更容易出现这种错误。
改用 Facebook 开发的 Flow
Flow 是 Facebook 开发的型别检查工具。
更多与 TypeScript 的比较可以在 Github 的这篇文章查看。
建置步骤 :
npm i -g flow-bin
npm i -d @babel/core @babel/cli @babel/preset-flow
@babel/preset-flow
npm run flow init
产生 .flowconfig在使用上,只要在想进行型别加注和检查的 js 档的开头加 // @flow
即可。
以 xstate 做资料的状态管理
XState 是一个状态管理(State Management)的 Library,负责储存及描述各种状态与各种状态间的转换,有点类似於 Redux、Flux,不同的地方在於 XState 整个核心都源自於 Statecharts,也就是我们需要定义好整个应用程序会有哪些状态,和每个状态下能转换到哪些状态(顺序性)以及他们之间如何转换。XState 简介
以 FP(Functional Programming)转换开发思维
使用其他语言(e.g. Dart / Clojure / Elm ...)
前言 今天是铁人赛的第十天,要来开始说说大叔的前端之路 并且说明我都看那些教学文件或影片 我是去年中...
在开始进入复杂的内容之前,我想先带大家认识几个会大量出现在每一个测试程序码里的核心语法,这些语法如果...
Uptime - 掌握系统的生命徵象 系列文章 (1/4) - 我们要观测的生命徵象是什麽? (2/...
终於到了vuex拉!! Day10时有说之後要来研究,没想到这一天这麽快就到来,那就进入正题吧。 为...
「我们是认真严肃地看待命名这件事,请您牢记这一点」 取自: Clean Code (p.20) 前...