【发布时间】:2019-01-05 09:24:06
【问题描述】:
此代码有效:
class A {}
class B {}
class C {}
const classCFromAOrB = (element: A | B): C => new C()
const a: A[] | B[] = [new A()]
const c: C[] = a.map(element => classCFromAOrB(element))
这段代码没有:
import { classA } from '../some'
import { classB } from './../some'
interface interfaceC {}
const render = (element: classA | classB): interfaceC => {
return {}
}
interface ResultsScreenProps {
resultsScreenPresented: boolean
answers: classA[] | classB[]
dismiss: SimpleFunc
}
const Screen: React.SFC<ResultsScreenProps> = (props) => {
const array: classA[] | classB[] = props.answers
const second: interfaceC[] = array.map(el => render(el)) // here is the error
...
}
在定义 second 的行上出现错误:
[ts] 无法调用类型缺少调用签名的表达式。 类型 '((callbackfn: (value: classA, index: number, array: classA[]) =>...' 没有兼容的调用签名。
我做错了什么?
如果 classA 如下所示,则该错误是可重现的:
class classA {
anyArg: number
constructor(anyArg: number) {
this.anyArg = anyArg
}
}
【问题讨论】:
-
什么是
ResultsScreenProps? -
@ExplosionPills,添加声明
-
什么是
SimpleFunc? -
顺便说一句,我没有收到此错误;你可能抄错了一些东西。您能否发布导致问题的实际代码?
-
You can't call methods which are union types。将类型从
classA[] | classB[]重新定义为(classA | classB)[],或者在调用map之前将值扩大到该类型。
标签: typescript