打字稿1.4联合类型,假类型不匹配错误

用户名

我一直在玩Typescript 1.4中的联合类型,并且遇到了错误的类型不匹配错误。

这是编译器错误还是我缺少什么?

错误TS2345:“字符串|类型”参数 无法将“对象”分配给“字符串”类型的参数。类型“对象”不能分配给类型“字符串”。

/** @inheritdoc */
public log(logLevel : LogLevel, message : string|Object, exception?: Exception): void {
    // Check if the message is of type Object
    if (Util.isObject(message)) {
        // Log the message object
        this.logObject(logLevel, message, exception);
    }
    // Check if the message is of type string
    else if(Util.isString(message)) {
        // Log the message
        this.logMessage(logLevel, message, exception);
    }
}

class Util {

    protected static TYPE_STRING = 'string';

    public static isString(object : any): boolean {
        return (typeof object === Util.TYPE_STRING);
    }

    public static isObject(object : any): boolean {
        return (object instanceof Object);
    }

}
马库斯·贾德洛(Markus Jarderot)

打字稿编译器不知道您对isStringisObject方法的意图,并且不能正确地传递类型。您应该内联类型测试:

/** @inheritdoc */
public log(logLevel : LogLevel, message : string|Object, exception?: Exception): void {
    // Check if the message is of type Object
    if (message instanceof Object) {
        // Log the message object
        this.logObject(logLevel, message, exception);
    }
    // Check if the message is of type string
    else if (typeof message === 'string') {
        // Log the message
        this.logMessage(logLevel, message, exception);
    }
}

如果您不想这样做,可以断言类型:

/** @inheritdoc */
public log(logLevel : LogLevel, message : string|Object, exception?: Exception): void {
    // Check if the message is of type Object
    if (Util.isObject(message)) {
        // Log the message object
        this.logObject(logLevel, <Object> message, exception);
    }
    // Check if the message is of type string
    else if(Util.isString(message)) {
        // Log the message
        this.logMessage(logLevel, <string> message, exception);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

打字稿联合类型

来自分类Dev

打字稿联合类型推断

来自分类Dev

对象类型的打字稿联合

来自分类Dev

为什么打字稿在类型联合上给出类型错误?

来自分类Dev

打字稿:从对象数组派生联合类型

来自分类Dev

打字稿:元组到联合类型

来自分类Dev

打字稿中的联合返回类型

来自分类Dev

多种类型的打字稿联合

来自分类Dev

缩小打字稿中的联合类型

来自分类Dev

打字稿-混合类型

来自分类Dev

打字稿合并类型

来自分类Dev

打字稿:onPress类型

来自分类Dev

打字稿超级类型

来自分类Dev

打字稿包装类型

来自分类Dev

打字稿类型断言

来自分类Dev

Promise 的打字稿类型

来自分类Dev

打字稿1.3有时会给出错误的类型不匹配错误

来自分类Dev

打字稿类型 a 或类型 b

来自分类Dev

差异联合类型和区分的联合打字稿/ F#

来自分类Dev

打字稿中包含联合类型的对象的区别联合

来自分类Dev

如何使用类型防护解决接口的打字稿联合类型

来自分类Dev

打字稿推断联合类型而不是指定的类型

来自分类Dev

类似于记录但创建联合类型的打字稿类型

来自分类Dev

不遵守打字稿声明的类型

来自分类Dev

打字稿编译日期类型错误

来自分类Dev

打字稿错误 # 70006 类型引用任何

来自分类Dev

函数类型注释打字稿

来自分类Dev

打字稿-返回类型条件

来自分类Dev

打字稿声明类类型