【问题标题】:TypeScript - Check if given 'any' parameter is custom type?TypeScript - 检查给定的“任何”参数是否是自定义类型?
【发布时间】:2018-06-08 06:29:57
【问题描述】:

我有一个这样的函数模板:

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

我有一个名为CreateLobbyParameter 的课程:

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

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

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

另外,arg instanceof CreateLobbyParameter 返回 false。

【问题讨论】:

  • 不太清楚您要做什么,您是否要键入一个将any 作为参数的函数?
  • GameMode 是枚举还是其他类?
  • 您应该为args 定义一个接口,而不是将其键入为any
  • GameMode 是一个枚举。
  • Johnny,但它的属性是灵活的,它们会根据它的位置而变化。

标签: javascript typescript casting typeof type-assertion


【解决方案1】:

像 JavaScript 一样对待它。

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

那么你就有了一个真正的 CreateLobbyParameter 对象可以使用,或者你可以用不符合的参数做任何事情。

【讨论】:

  • 我打开了noImplicitAny 选项,但让我尝试修改代码。
  • 这成功了,当我给他们any 类型时,感谢您的帮助。
  • 乐于助人:)
【解决方案2】:

其实我找到了另一种方式:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    • 1970-01-01
    相关资源
    最近更新 更多