Typescript 4.0 beta
npm install typescript@beta
// or
yarn add typescript@beta
不建议/不赞成使用
注释 具体来说,罪魁祸首通常是一个称为项目加载
的过程,该过程与我们的编译器的程序构建步骤大致相同。这是从一组初始文件开始,解析它们,解析它们的依存关系,解析那些依赖关系,解析那些依赖关系的依赖关系(开始各种套娃)等等的过程。
当前,唯一支持此模式的编辑器是Visual Studio Code Insiders
,您可以按照以下步骤尝试。
简单来说 ts4.0 beta
就是在允许配置单个文件视图 ts 编译模式,让以前的启动项目的时候 20s + 的时间缩短到 2-5s 左右。
打开JSON设置视图: > Preferences: Open Settings (JSON)
添加以下行:
// The editor will say 'dynamic' is an unknown option,
// but don't worry about it for now. It's still experimental.
"typescript.tsserver.useSeparateSyntaxServer": "dynamic",
unknown
在 catch
中允许使用try {
// ...
}
catch (x) {
// x has type 'any' - have fun!
console.log(x.message);
console.log(x.toUpperCase());
x++;
x.yadda.yadda.yadda();
}
unknown
try {
// ...
}
catch (e: unknown) {
// error!
// Property 'toUpperCase' does not exist on type 'unknown'.
console.log(e.toUpperCase());
if (typeof e === "string") {
// works!
// We've narrowed 'e' down to the type 'string'.
console.log(e.toUpperCase());
}
}
concat
和 tail
function concat(arr1, arr2) {
return [...arr1, ...arr2];
}
// 返回除第一个元素外的其他所有元素
function tail(arg) {
const [_, ...result] = arg;
return result
}
复制代码
4.1 思考怎么在 ts 中键入
// 其中 A,B,C,D 是不同基本类型
function concat<>(arr1: [], arr2: []): [A];
function concat<A>(arr1: [A], arr2: []): [A];
function concat<A, B>(arr1: [A, B], arr2: []): [A, B];
function concat<A, B, C>(arr1: [A, B, C], arr2: []): [A, B, C];
function concat<A, B, C, D>(arr1: [A, B, C, D], arr2: []): [A, B, C, D];
function concat<A, B, C, D, E>(arr1: [A, B, C, D, E], arr2: []): [A, B, C, D, E];
function concat<A, B, C, D, E, F>(arr1: [A, B, C, D, E, F], arr2: []): [A, B, C, D, E, F];)
复制代码
4.2 上面还只是为了给 arr1 支持不同类型,函数重载已经比较复杂了。
function concat<A2>(arr1: [], arr2: [A2]): [A2];
function concat<A1, A2>(arr1: [A1], arr2: [A2]): [A1, A2];
function concat<A1, B1, A2>(arr1: [A1, B1], arr2: [A2]): [A1, B1, A2];
function concat<A1, B1, C1, A2>(arr1: [A1, B1, C1], arr2: [A2]): [A1, B1, C1, A2];
function concat<A1, B1, C1, D1, A2>(arr1: [A1, B1, C1, D1], arr2: [A2]): [A1, B1, C1, D1, A2];
function concat<A1, B1, C1, D1, E1, A2>(arr1: [A1, B1, C1, D1, E1], arr2: [A2]): [A1, B1, C1, D1, E1, A2];
function concat<A1, B1, C1, D1, E1, F1, A2>(arr1: [A1, B1, C1, D1, E1, F1], arr2: [A2]): [A1, B1, C1, D1, E1, F1, A2];
复制代码
4.3 从这里可以看到,如果我们要在 ts 中实现 tail 函数的话,我们的重载函数的复杂度就会无穷尽的增长。官方叫他
This is another case of what we like to call “death by a thousand overloads”
overload
这里肯定会想到 -地表最强骨法师 飞鼠
- 被 1000 个骨王 x 倒(大雾)。不好意思放错图了,看这个