TypeScript - 检查给定的'any'参数是否为自定义类型?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TypeScript - 检查给定的'any'参数是否为自定义类型?相关的知识,希望对你有一定的参考价值。

我有一个这样的功能模板:

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。

答案

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

以上是关于TypeScript - 检查给定的'any'参数是否为自定义类型?的主要内容,如果未能解决你的问题,请参考以下文章

Typescript 检查导出的接口

如何使用 TypeScript 正确键入检查允许部分子树的嵌套记录?

TypeScript

TypeScript

typescript变量定义

对接收动作类型的 TypeScript reducer 进行类型检查