TypeScript - 检查给定的 'any' 参数是否为自定义类型?
TypeScript - Check if given 'any' parameter is custom type?
我有一个这样的函数模板:
function (..., args: any) {...}
我有一个 class 叫做 CreateLobbyParameter
:
export class CreateLobbyParameter {
userId: number;
gameMode: GameMode;
}
如果给定 any
类型的 args 参数与 CreateLobbyParameter
不相似(例如 {userId: 0, gameMode: 0}
,而不是 {userId:0}
);我想处理那种情况。
我试过 typeof(arg as CreateLobbyParameter)
,但它 returns 参数 {userId: 0, gameMode: 0}
的字符串 "object"
,而不是 CreateLobbyParameter.
此外,arg instanceof CreateLobbyParameter
returns 错误。
像 JavaScript 一样对待它。
var userId = arg.userId;
var gameMode = arg.gameMode;
if (userId && gameMode) {
var myCreateLobbyParameter = new CreateLobbyParameter {
userId = userId,
gameMode = gameMode
}
}
那么你就有了一个真正的 CreateLobbyParameter
对象可以使用,或者你可以用一个不一致的参数做任何事情。
其实我找到了另一种方法:
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());
我有一个这样的函数模板:
function (..., args: any) {...}
我有一个 class 叫做 CreateLobbyParameter
:
export class CreateLobbyParameter {
userId: number;
gameMode: GameMode;
}
如果给定 any
类型的 args 参数与 CreateLobbyParameter
不相似(例如 {userId: 0, gameMode: 0}
,而不是 {userId:0}
);我想处理那种情况。
我试过 typeof(arg as CreateLobbyParameter)
,但它 returns 参数 {userId: 0, gameMode: 0}
的字符串 "object"
,而不是 CreateLobbyParameter.
此外,arg instanceof CreateLobbyParameter
returns 错误。
像 JavaScript 一样对待它。
var userId = arg.userId;
var gameMode = arg.gameMode;
if (userId && gameMode) {
var myCreateLobbyParameter = new CreateLobbyParameter {
userId = userId,
gameMode = gameMode
}
}
那么你就有了一个真正的 CreateLobbyParameter
对象可以使用,或者你可以用一个不一致的参数做任何事情。
其实我找到了另一种方法:
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());