【问题标题】:Declare a variable in type that includes Generic在包含 Generic 的类型中声明一个变量
【发布时间】:2019-12-15 21:11:50
【问题描述】:

我正在尝试声明一个变量并定义它的类型:

const state: State<A, B, C> = { ... };

我收到以下错误:Cannot find name 'A'. 看起来 TS 认为我正在使用已经定义的类型 A,但我想要的是这样的:

const state<A, B, C>: State<A, B, C> = { ... };

正确的语法是什么?

【问题讨论】:

  • 我认为在声明变量时不能使用泛型类型占位符作为类型/类。类型占位符只能在声明 class/function 时使用,而不是在使用时使用。
  • 那么我有哪些替代方法来定义该变量的类型?

标签: javascript typescript generics typescript-generics


【解决方案1】:

你可以创建一个工厂函数,比如:

interface State<A, B, C> { 
  a: A,
  b: B,
  c: C
};

function createState<A, B, C>(obj: State<A, B, C>) {
  return obj;
}

const state = createState({
  a: "abc",
  b: 2,
  c: true
});

另一种选择是用类替换接口:

class State<A, B, C> {
  constructor(
    readonly a: A,
    readonly b: B,
    readonly c: C
  ) {}
}

const state = new State("abc", 2, true);

【讨论】:

  • 创建一个函数来创建初始值,效率不高,看起来很奇怪。但如果这是唯一的选择,这可能是我将使用的解决方案...
  • 不幸的是,如果您使用接口,这是强制编译器推断泛型类型的唯一方法。另一种选择是用类替换接口。我也将示例添加到我的答案中。
猜你喜欢
  • 2013-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 1970-01-01
  • 1970-01-01
  • 2010-09-28
相关资源
最近更新 更多