TypeScript

通过参数类型缩小函数返回值泛型类型

https://github.com/microsoft/TypeScript/issues/33014
在该 issure 完成前的最佳解决方案(workaround)

  1. 使用函数重载实现外部的可推导返回值类型;
  2. 在进入控制流分支时 声明返回值类型,通过正确的声明,严格函数体实现时的类型检查;
    1. function depLikeFun(str: "t"): F["t"];
    2. function depLikeFun(str: "f"): F["f"];
    3. function depLikeFun(str: "t" | "f") {
    4. if (str === "t") {
    5. const ret: F[typeof str] = 1;
    6. return ret;
    7. } else {
    8. const ret: F[typeof str] = true as boolean;
    9. return ret;
    10. }
    11. }

Tools

shell 用 js 写

相当于通过 node 来解释脚本,同理应该 ts-node 也可以:
https://www.youtube.com/watch?v=0Gsq5q898Nw
往 shell 的可执行地址中添加相关目录:
image.png
添加解释标识:
image.png

SICP

checking the primality of an integer n

检查一个数是否是素数(约数只有 1 和 自身)
算 n 是否是素数,也就是算2 ~ n-1 间是否有数的约数
n is prime if and only if n is its own smallest divisor.

  1. function square(x) {
  2. return x * x;
  3. }
  4. function smallest_divisor(n) {
  5. return find_divisor(n, 2);
  6. }
  7. function find_divisor(n, test_divisor) {
  8. return square(test_divisor) > n
  9. ? n
  10. : divides(test_divisor, n)
  11. ? test_divisor
  12. : find_divisor(n, test_divisor + 1);
  13. }
  14. function divides(a, b) {
  15. return b % a === 0;
  16. }
  17. function is_prime(n) {
  18. return n === smallest_divisor(n);
  19. }
  20. is_prime(42);