如何在Typescript中传递与函数相同的类型?

时间:2018-09-15 18:50:54

标签: typescript types

我有一个函数,希望能够将一个类传递给它,并使其返回与该类相同的类型。

目前,我发现的最好方法如下:

protected modClass<CLASS_TYPE>(modMe: CLASS_TYPE): CLASS_TYPE {
    console.log(modMe);
    return modMe;
}
const modded = modClass<SomeClass>(new SomeClass());

上面的代码并不糟糕,它确实起作用,但是它并没有真正返回传递给该函数的类的类型,而是让它预先定义并拒绝采用任何其他类类型。

例如,我想做的是

const modded = modClass(new SomeClass());
console.log(typeof modded); // SomeClass;

反正有一个函数可以返回TypeScript中参数之一的类型吗?

编辑:我应该提一下,我不仅在尝试正确设置类型,还希望对其进行检查。我可以使用modClass函数返回类型any和typeof是正确的。只是没有任何实际类型检查。

1 个答案:

答案 0 :(得分:1)

typeof是在表达式中使用的Javascript运算符,将按预期返回类的object

对于您的函数,您无需显式指定泛型参数即可由编译器正确推断出泛型参数。 (更改了名称以符合约定,但无论如何都可以使用)

class SomeClass{
  bar(){}
}
function modClass<T>(modMe: T): T {
    console.log(modMe);
    return modMe;
}
const modded = modClass(new SomeClass()) // modded is SomeClass

modded.bar()

Playground link