Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

EmptyObject 判断空对象 #1

Open
xiaochengzi6 opened this issue Oct 7, 2022 · 0 comments
Open

EmptyObject 判断空对象 #1

xiaochengzi6 opened this issue Oct 7, 2022 · 0 comments

Comments

@xiaochengzi6
Copy link
Owner

xiaochengzi6 commented Oct 7, 2022

unique symbol :unique symbol 是 symbol 的子类型,可以通过调用 Symbol() 、 Symbol.for() 或者显式类型声明来生成 unique symbol 类型的值,unique symbol 只可用于常量声明和只读静态属性上,一般使用 const 申明

declare const $CombinedState: unique symbol

interface EmptyObject {
  readonly [$CombinedState]?: undefined
}

redux 中 看到了这样的ts 类型很好奇

它主要是一个判断作用 空对象中是不存在 symbol 类型的 并且 symbol 是可以修改的而且应该有值 那么这里就明白了

当我们去定义了一个对象 去和 EmptyObject 对比时除了空对象其他都不行,为什么?

因为空对象是 EmptyObject 对象的父类型,且 EmptyObject 非常特殊它具备了对象属性理应不存在的特征以至于和其他有属性的对象相比时没有共同属性这就说明这个不是空对象

EmptyObject 的作用是判断是否是空对象的

这里使用到了这样的方式

type isBoolean<T extends any> = T extends EmptyObject ? true : false 

当传入的存在 symbol 属性时候就会返回 false
例子

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant