我想知道有一个代码可以根据方法的泛型类型自动检查参数类型。但参数的类型应与给定泛型类型的具体属性类型相同。让我举个例子。
让我们说我有这些接口:
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;方法中的值仅来自给定的通用参数?
答案 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']) { }
缺点是我需要在每次调用时输入第一个参数,即使此属性是常量但我认为我可以忍受