ts断言写法求助


type ParticleID = number & {
    readonly __tag__: 'ParticleID';
};

type effectInfo = {
    [P in sometype]:sometype[P]
    // ...
}
class aaa {
    _list:ReCord<ParticleID,effectInfo>

    GetInfo(arg: ParticleID | effectInfo): effectInfo {
        if (typeof(arg) == 'object')
            return arg
        else
            return this._list[arg];
    }
}

除了用typeof 有没有其他ts一点的语法?比如 isinas这些关键词?

阅读 1.8k
3 个回答

楼主混淆了ts中的typeof和typeof操作符
ts中的typeof是在type或者interface中生效的,获取的是ts类型
例如type FunctionType = typeof Function
而typeof操作符是获取js数据类型的,

const a = '1'
console.log(typeof a); // string

楼主声明了一个联合类型,那么在使用的时候必须使用到“类型守卫”,也就是使用typeof操作符来判断是什么数据类型

function isEffectInfo(value: any): value is effectInfo {
  return typeof(arg) == 'object';
}

if (isEffectInfo(arg)) {
  return arg;
}

这里不应该追求 ts 风格吧?TypeScript 是类型系统,并不真正影响执行;typeof 这里明显是运行时的状态,是方便 JS 无类型执行,不应该考虑这点。

如果你真的要限制类型,应该从根源上限制,参数、返回值都尽量固定为一个类型。类型转换全部通过显式函数来完成。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进