Javascript 引用TypeScript中的推断类型

Javascript 引用TypeScript中的推断类型,javascript,dependency-injection,closures,typescript,inferred-type,Javascript,Dependency Injection,Closures,Typescript,Inferred Type,有没有办法在TypeScript中引用推断类型 在下面的示例中,我们得到了很好的推断类型 function Test() { return {hello:"world"} } var test = Test() test.hello // works test.bob // 'bob' doesn't exist on inferred type 但是,如果我想定义一个函数,它接受一个类型为“whichTestreturns”的参数,而不显式地定义接口,该怎么办 function

有没有办法在TypeScript中引用推断类型

在下面的示例中,我们得到了很好的推断类型

function Test() {
    return {hello:"world"}
}

var test = Test()
test.hello // works
test.bob   // 'bob' doesn't exist on inferred type
但是,如果我想定义一个函数,它接受一个类型为“which
Test
returns”的参数,而不显式地定义接口,该怎么办

function Thing(test:???) {
  test.hello // works
  test.bob   // I want this to fail
}
这是一个变通方法,但若测试有自己的参数,那个么它会变得很麻烦

function Thing(test = Test()) {} // thanks default parameter!
是否有某种方法可以引用任何测试返回的推断类型?所以我可以键入“无论测试返回什么”,而无需创建接口

我之所以关心这个问题,是因为我通常使用闭包/模块模式而不是类。Typescript已经允许您以类的形式键入某些内容,即使您可以创建一个描述该类的接口。我想键入函数返回的任何内容,而不是类。有关原因的更多信息,请参阅


解决这个问题的最佳方法是,如果TypeScript添加了定义将依赖项作为参数的模块的功能,或者在闭包中定义模块的功能。然后我可以使用spiffy
export
语法。有人知道这方面是否有计划吗?

您可以将接口主体用作类型文字:

function Thing(test: { hello: string; }) {
    test.hello // works
    test.bob   // I want this to fail
}
相当于

interface ITest {
    hello: string;
}

function Thing(test: ITest) {
    test.hello // works
    test.bob   // I want this to fail
}
只是别忘了
位于每个成员的末尾


没有用于命名或引用推断类型的语法。最接近的方法是为要使用的成员使用接口或类型文本。接口和类型文本将匹配至少具有已定义成员的任何类型。“鸭子打字”

现在可以:

功能测试(){
返回{你好:“世界”}
}
函数对象(测试:ReturnType){
test.hello//works
test.bob//失败
}

我想做的主要事情是将
测试
键入为“无论
测试
返回什么”,而不必定义不能定义的类型,因此术语“匿名类型”-它不能命名(从技术上讲,当您键入一个类型文本时,您键入的是一个与另一个匿名类型具有相同形状的新匿名类型)。