2017-12-27 484 views
1

我有一个函数模板是这样的:TypeScript - 检查给定'任何'参数是否为自定义类型?

function (..., args: any) {...} 

而且我有一类叫做CreateLobbyParameter

export class CreateLobbyParameter { 
    userId: number; 
    gameMode: GameMode; 
} 

如果给any类型参数args不是类似于CreateLobbyParameter(如{userId: 0, gameMode: 0},但不{userId:0} );我想要处理这种情况。

我试过typeof(arg as CreateLobbyParameter),但它返回字符串"object"的参数{userId: 0, gameMode: 0},而不是CreateLobbyParameter.

此外,arg instanceof CreateLobbyParameter返回false。

+0

不太清楚什么是你想这样做,你想输入一个函数,'any'作为参数? – asosnovsky

+0

“GameMode”是枚举类还是其他类? –

+0

您应该为'args'定义一个接口,而不是将其输入为'any'。 – JohnnyHK

回答

3

把它当作JavaScript来对待。

var userId = arg.userId; 
var gameMode = arg.gameMode; 
if (userId && gameMode) { 
    var myCreateLobbyParameter = new CreateLobbyParameter { 
     userId = userId, 
     gameMode = gameMode 
    } 
} 

那么你有一个真正CreateLobbyParameter对象一起工作,或者你可以用不符合要求的参数做什么。

+0

我开启了'noImplicitAny'选项,但让我尝试修改代码。 –

+1

这个解决了,当我给他们'任何'类型,感谢您的帮助。 –

+0

高兴地帮助:) –

0

我居然找到另一种方式:

export function isSimilar(object: any, target: any): boolean { 
    if (typeof(object) !== object && (typeof(object) !== typeof(target))) { 
     return true; 
    } 
    const keys: string[] = Object.keys(object); 
    const targetKeys: string[] = Object.keys(target); 
    return !keys.every(x => targetKeys.indexOf(x) >= 0); 
} 

用法:

hasNull(args, new CreateLobbyParameter()); 
相关问题