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());