[英]TypeScript - Check if given 'any' parameter is custom type?
I have a function template like this: 我有一个这样的功能模板:
function (..., args: any) {...}
And I have a class called CreateLobbyParameter
: 我有一个名为CreateLobbyParameter
的类:
export class CreateLobbyParameter {
userId: number;
gameMode: GameMode;
}
If given any
typed args parameter is not similar to CreateLobbyParameter
(eg {userId: 0, gameMode: 0}
, but not {userId:0}
); 如果给定any
类型化的args参数与CreateLobbyParameter
不相似(例如{userId: 0, gameMode: 0}
,而不是{userId:0}
); I wanna handle that situation. 我想处理那种情况。
I've tried typeof(arg as CreateLobbyParameter)
, but it returns the string "object"
for the parameter {userId: 0, gameMode: 0}
, and not CreateLobbyParameter.
我尝试过typeof(arg as CreateLobbyParameter)
,但它返回参数{userId: 0, gameMode: 0}
的字符串"object"
,而不是CreateLobbyParameter.
Also, arg instanceof CreateLobbyParameter
returns false. 此外, arg instanceof CreateLobbyParameter
返回false。
Treat it like JavaScript. 像JavaScript一样对待它。
var userId = arg.userId;
var gameMode = arg.gameMode;
if (userId && gameMode) {
var myCreateLobbyParameter = new CreateLobbyParameter {
userId = userId,
gameMode = gameMode
}
}
Then you have a real CreateLobbyParameter
object to work with, or you can do whatever with a non-conforming argument. 然后你有一个真正的CreateLobbyParameter
对象可以使用,或者你可以用不符合的参数做任何事情。
I actually found another way: 我其实找到了另一种方式:
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);
}
Usage: 用法:
hasNull(args, new CreateLobbyParameter());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.