TypeScript声明函数不可调用
无论出于何种原因,TypeScript都没有检测到实例函数的某些部分不可调用TypeScript声明函数不可调用,typescript,Typescript,无论出于何种原因,TypeScript都没有检测到实例函数的某些部分不可调用 type Constructable = { new(...args: any[]): any } function isClass(func: any) { return ( typeof func === 'function' && /^class\s/.test(Function.prototype.toString.call(func)) ) } function c
type Constructable = { new(...args: any[]): any }
function isClass(func: any) {
return (
typeof func === 'function' &&
/^class\s/.test(Function.prototype.toString.call(func))
)
}
function coerceOne(data: any, fn: Function | Constructable) {
if (isClass(fn)) {
const constructor = fn as Constructable
return new constructor(data)
} else {
return fn(data) // <-- ERROR
}
}
关于如何解决这个问题有什么想法吗?您的类型guard
isClass
需要一个谓词返回类型::func是可构造的
type Constructable = { new(...args: any[]): any }
function isClass(func: any): func is Constructable {
return (
typeof func === 'function' &&
/^class\s/.test(Function.prototype.toString.call(func))
)
}
function coerceOne(data: any, fn: Function | Constructable) {
if (isClass(fn)) {
const constructor = fn as Constructable
return new constructor(data)
} else {
return fn(data)
}
}
console.log(coerceOne('works', console.log))
您的类型guard
isClass
需要谓词返回类型::func是可构造的
type Constructable = { new(...args: any[]): any }
function isClass(func: any): func is Constructable {
return (
typeof func === 'function' &&
/^class\s/.test(Function.prototype.toString.call(func))
)
}
function coerceOne(data: any, fn: Function | Constructable) {
if (isClass(fn)) {
const constructor = fn as Constructable
return new constructor(data)
} else {
return fn(data)
}
}
console.log(coerceOne('works', console.log))
您正在检查
func==='function'
是否假定不相等?JavaScript中的类是函数,因此需要进行此检查。您正在检查func=='function'
是否假定不相等?JavaScript中的类是函数,因此需要进行此检查。