多说一嘴,2024 计划开启自己的博客,在不断输入的同时,也能有一些输出,将自己的所见所闻表达出来,表达清楚,也是一种能力。分享一些技术本身和对见闻的思考与反思。希望若干年后还可以想起来回头看看,也算是一种留痕吧!
技术见闻
增强的 HTML,将 AJAX 等等操作直接添加到 HTML 中而不需要 JavaScript 的库
<button
hx-post="/clicked"
hx-trigger="click"
hx-target="#parent-div"
hx-swap="outerHTML"
>
Click Me!
</button>
<div hx-put="/messages">Put To Messages</div>
科技见闻
- Apple Vision Pro 于 2024 年 2 月 2 日于美国上市
最近两天网上已经有科技博主陆续去美国线下购买 Vision Pro,刷到了不少关于 Vision Pro 的短视频,虽然 VR(虚拟现实)和 AR(增强现实)的技术产品已经面世有几年了,但是 Apple 的混合现实产品发布还是让人非常期待啊!全新的空间操作系统,3D 的照片、将虚拟现实和真实世界融合在一起。第一代产品就这么惊艳,很难想象过去五年后再回头看第一代 Vision Pro 时是什么感受了哈哈,希望科技越来越惠及普通人,每个人都可以拥抱新鲜美好的事物。第一代 Vision Pro 售价$3499,折合人民币 25000 元。
开发技巧
TS 的一些官方泛型工具
Parameters
获取函数入参类型
类型实现:
type Parameters<T extends (...args: any) => any> = T extends (
...args: infer P
) => any
? P
: never;
用法:
const foo = (a: number) => {};
type IFooParamsType = Parameters<typeof foo>;
ReturnType
获取函数返回类型
类型实现:
type ReturnType<T extends (...args: any) => any> = T extends (
...args: any
) => infer R
? R
: any;
用法:
const foo = () => {
return "";
};
type IFooReturnType = ReturnType<typeof foo>; // string;
ConstructorParameters
获取函数/Class 构造函数入参类型
类型实现:
type ConstructorParameters<T extends new (...args: any) => any> =
T extends new (...args: infer P) => any ? P : never;
用法:
class Person {
constructor(name: string, age?: number) {}
}
type T = ConstructorParameters<typeof Person>; // [name: string, age?: number]
Uppercase、Lowercase、Capitalize、Uncapitalize
模板字符串类型
// 转换字符串字面量到大写字母
type Uppercase<S extends string> = intrinsic;
// 转换字符串字面量到小写字母
type Lowercase<S extends string> = intrinsic;
// 转换字符串字面量的第一个字母为大写字母
type Capitalize<S extends string> = intrinsic;
// 转换字符串字面量的第一个字母为小写字母
type Uncapitalize<S extends string> = intrinsic;
type T0 = Uppercase<"Hello">; // => 'HELLO'
type T1 = Lowercase<T0>; // => 'hello'
type T2 = Capitalize<T1>; // => 'Hello'
type T3 = Uncapitalize<T2>; // => 'hello'
思考
关于架构&技术选型
自古以来,天下大势,合久必分,分久必合。
当事物开始不断地熵增时,人们就会开始思考如何减少复杂度,于是出现了数据与视图分离,出现了客户端和服务端的分层架构。当使用一个为了降低复杂度而设计的模型时,你往往也需要更大的心智负担以从最开始时满足模型设计。业务的扩张也许是平滑的也许是快速的爆炸式的,但是某些技术在选择之初就已经奠定了未来场景的局限性,或者为了也许并不存在的假想复杂度增加而担负没有必要的负担。
技术如果脱离实际也许就没有价值,好的想法没有技术基础也无法实现。