![](/img/trans.png)
[英]Assign types to argument of generic mapping function in Typescript
[英]How to enforce generic types typescript function
我有以下 function 签名:
const renderMessage = <T extends A | B >
(
a: T,
b: Map<T, Array<string>>,
c: T,
) => {
我的问题是我可以这样称呼这个 function :
type A = "A" | "B"
type B = "Z" | "Y"
let myA: A = "A"
let myB: B = "Z"
let myAMap: Map<A,Array<string>> = new Map(...)
let myBMap: Map<B,Array<string>> = new Map(...)
renderMessage(myA, myBMap, myA) // I want error here
renderMessage(myB, myAMap, my B) // I want error here
这里解释了能够做到这一点的原因。 如果我理解正确,我的Map
object 的结构不会因为 T 是 A 或 B 而改变,所以 typescript 不会抱怨。 但是,我正在努力弄清楚如何执行此操作。
编辑
它们是类型而不是类。 见游乐场链接
具有不同类(A 和 B)的原因应该是一种类型的实例应该保存与另一种不同的结构化数据,或者一种类型的实例应该具有不同的方法。 如果数据的结构相同,方法也都相同,那么就不应该有单独的类。
如果您以任何方式区分 A 和 B,则会根据需要出现错误:
class A{
x = 'x'
}
class B{
y = 'g'
}
const renderMessage = <T extends A | B >
(
a: T,
b: Map<T, Array<string>>,
c: T,
) => {
}
let myA: A = new A()
let myB: B = new B()
let myAMap: Map<A,Array<string>> = new Map(...)
let myBMap: Map<B,Array<string>> = new Map(...)
renderMessage(myA, myBMap, myA) // I want error here
renderMessage(myB, myAMap, myB) // I want error here
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.