使用通用

时间:2018-07-11 16:00:57

标签: reactjs typescript react-native

编辑:

重要

正如@jcalz所提到的,该示例本身是错误的,因为如果在子组件上定义了任何State,则初始化是错误的。

作为忽略它的一种方法,可以使用as键作为@sychd提及,但请记住此示例实际上是一个错误


我正在努力用打字稿初始化状态

所以我有一个状态可变的组件,即该组件具有状态,但是子级也可以定义(额外)状态。

这带来了尝试仅用其知道的部分初始化父状态的问题。

这段代码可以解释问题

interface Default {
  something: boolean
}

class A<State> {
  state: State & Default = {
    something: false
  }
}

检查:Typescript Playground

因此,在上面我们看到state抱怨Default类型不能分配给Default & State

有什么办法解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

关于您的代码-诀窍是as State & Default,因为TS将{something: false}视为某个对象。但是

class A<State> {
  state: State & Default = {
    something: false
  } as  State & Default;
}

可以。 另外,可能会满足您的需求,您可以尝试可扩展的泛型:

interface Default {
  something: boolean
}
interface State extends Default {
  something: boolean,
}

class A<T extends Default> {
  state: T = {
    something: false
  } as T;
}