具有类型相关参数的TypeScript泛型方法

时间:2018-04-12 09:36:48

标签: typescript generics

我想知道有一个代码可以根据方法的泛型类型自动检查参数类型。但参数的类型应与给定泛型类型的具体属性类型相同。让我举个例子。

让我们说我有这些接口:

interface IMessage {
    name: string,
    payload: any
}

interface IConcreteMessage {
    name: "concreteMessage",
    payload: string
}

我想通过这种方式将一些方法接受IMessage称为通用参数:

someobject.genericMethod<IConcreteMessage>(78)

现在的问题是,如何声明方法,以便编译器为给定的参数抛出类型错误?

public genericMethod<T extends IMessage>(payload: ??) {}

第二件事 - 我可以以某种方式提取&#34; concreteMessage&#34;方法中的值仅来自给定的通用参数?

2 个答案:

答案 0 :(得分:1)

您可以使用类型查询来实现此目的:

genericMethod<T extends IMessage>(payload: T['payload']) { }

someobject.genericMethod<IConcreteMessage>(78) // will be an error

你可以'从文字字符串类型在运行时获取一个字符串,你需要传递一个字符串值作为参数。

答案 1 :(得分:0)

好的,所以我最终得到了这个解决方案:

genericMethod<T extends IMessage>(name: T['name'], payload: T['payload']) { }

缺点是我需要在每次调用时输入第一个参数,即使此属性是常量但我认为我可以忍受