javascript 在typescript中是否有一个通用的超类,可以像Java中那样用于所有对象?

sbtkgmzw  于 2023-02-02  发布在  Java
关注(0)|答案(2)|浏览(104)

我有一个方法可以在我的typescript项目中返回任何类型的对象。在java中,你只需要返回Object,然后调用者必须进行强制转换。你在Typescript中是如何做到这一点的?所有的类都继承自一个公共的超类,比如Java对象类型吗?

kwvwclae

kwvwclae1#

如果您需要任何东西,并且以后会知道它是什么,请使用unknown(以后需要使用as type):

function test(): unknown {
  return { a: 0, b: 1 };
}

test().a // Error
(test() as {a:number,b:number}).a // Ok

如果你不知道也不关心它是什么,那么就使用any(但是这个例子中的类型safety已经过时了):

function test(): any {
  return { a: 0, b: 1 };
}

test().a // Ok

如果你至少知道它是object,你可以输入object并使用Object函数或者通过类型保护来访问它:

function test(): object {
  return { a: 0, b: 1 };
}

Object.keys(test()) // Ok

// Or use with type guard:

const tst = test()
if ("a" in tst) {
    tst.a // Ok
}

另请参见可分配性文档。

carvr3hs

carvr3hs2#

大多数情况下调用者会知道期望什么,你可以做的是在调用函数时推断类型,如下所示:

class A {
  public returnAnyThing<T>(): T {
    return {} as T;
  }
}

interface ReturnValue {
    val: number;
}

class Caller {
    public call(){
        const returnValue = new A().returnAnyThing<ReturnValue>();
        console.log(returnValue.val);
    }
}

相关问题