# 2022-08

# 一、Property 'value' does not exist on type 'EventTarget'

参考 (opens new window)

# 二、typescript 申明值可以为空

# 背景

因为经常有定义对象初始值的时候,会附一个空值 null ,便于页面上使用的时候判断数据是否存在。存在才用 if 进行渲染,避免报错。

<section v-if="userA">
 <div>{{userA.name}}</div>
</section>
1
2
3
interface User {
  name: string;
  contact: null | { phone: string; email: string }; // 不写 null ,定义的时候会报错。
}

const userA: User = {
  name: 'a',
  contact: null, // 初始定义为 null
};

// 模拟在其他地方设置 contact
function initContact(user: User){
  user.contact = { phone: '', email: '' };
}

initContact(userA);

// 使用 userA.contact Object is possibly 'null'
console.log(userA.contact.email)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 解决

# 问题一:interface 里面都要写 null |,很麻烦

定义一个工具泛型,处理可以为 null 的类型

type Nullable<T> = T | null;

interface User {
  name: string;
  contact: Nullable<{ phone: string; email: string }>;
}

type WithNullableFields<T, Fields> = {
  [K in keyof T]: K extends Fields 
    ? T[K] | null | undefined
    : T[K]
}

1
2
3
4
5
6
7
8
9
10
11
12
13

# 问题二:使用 userA.contact 的时候会报错

暂无

# 三、git fatal: refusing to merge unrelated histories

# 背景

仓库 B 的内容是复制的仓库 A,但是没有保留之前的 commit 记录,后期想要同步仓库 A 的改动到仓库 B,merge 的时候就会报错:fatal: refusing to merge unrelated histories

# 解决

# 方案一 -–allow-unrelated-histories

# 添加仓库 A
git remote add <remote> url

# 合并
git checkout Bbranch
git merge <remote>/Abranch -–allow-unrelated-histories
1
2
3
4
5
6

# 方案二 参考 (opens new window)

上次更新: 8/16/2022, 3:05:18 PM