Better

Ethan的博客,欢迎访问交流

ARTS 打卡第十八周

本次打卡值得关注的内容有,算法题为 merge sorted array,Review 主要内容为 TypeScript 类型声明的高阶用法,本周 Tips 内容为组件库功能探索与实践,主要是贴几个链接 mark 一下,分享的内容为 Angular 中的单元测试

Algorithm

本周继续完成 easy part,名为 merge sorted array,合并两个有序数组。

这个题目尝试了蛮多次,感觉 nums1 数组使用 0 占位,从 JS 的角度反而增加了复杂度,最后给出的代码如下

var merge = function(nums1, m, nums2, n) {debugger;
    var t = 0; // 偏移
    for(var i = 0; i < n; i++) {
        var n2 = nums2[i];
        if(!m) {
            nums1.splice(0, 1, n2);
            m++;
            continue;
        }
        for(var j = t; j < m; j++) {
            var n1 = nums1[j];
            var nextIndex = j + 1;
            var next = nums1[nextIndex];
            var insertIndex = -1;
            if(n2 <= n1) {
                insertIndex = j;
            }
            if(n2 > n1 && ( nextIndex >= m || n2 <= next)) {
                insertIndex = j + 1;
            }
            if(insertIndex !== -1) {
                nums1.splice(insertIndex, 0, n2);
                m++;
                t = insertIndex;
                break;
            }
        }
    }
    nums1.length = m
};

Review

本周阅读的文章来自 JavaScript Weekly 推荐,Using Typescript to make invalid states irrepresentable,标题花里胡哨的,主要内容就是 TypeScript 类型声明的一点高级用法。

如果我们需要声明一个类型,有两个可选字段 field1 和 field2,可以都无,可以均有,可以有 field1 无 field2,但不能只有 field2。我们需要怎么做呢。大致如下

interface NoFields {};

interface Field1Only {
  field1: string;
};

interface BothField1AndField2 {
  field1: string;
  field2: string;
};

/* 其实并不会用到这个,这里起到一个 doc 的作用 */
interface InvalidObject {
  field2: string;
};

然后我们利用 type 关键字就可以声明一个特定类型了

type Fields = NoFields | Field1Only | BothField1AndField2;

看上去是不是很美好了,但这里存在一个小问题,NoFields 类型是可以任意扩展的。如果我们要禁止非预期的字段,就需要用到 never 关键字了,配合动态声明的语法。

type NoFields = {
  [key: string]: never;
};

那么如果我们要允许非预期的字段呢,可以用到 [key: string]: type 即可。

Tip

组件库工程探索与实践

Share

最近公司进行了一次 Test Day,主要目的是为项目添加测试用例,于是对 angular 中单元测试和组件测试进行了简单学习。

相关概念

  • spy 间谍
  • TestBed 测试机床

两种风格

  • 使用 beforeEach 和 TestBed
  • 显示创建类

官网的文档,大而全,对于初学者,我们往往只需要掌握 20% 即可,这里先列出找到的不错的 Angular 测试相关资料



留言