使用泛型类型参数作为参数

时间:2016-05-30 12:24:19

标签: typescript typescript-generics

我试图创建一个泛型函数,该函数使用any类型参数调用另一个函数。这就是我试过的:

static GetInstance<T>(): T {
        return <T>injector.get(T); // get(param: any): any
    }

问题是这不会编译。我收到Cannot find name 'T'错误。

我尝试了get(typeof T)但是T型是字符串"function"

我该怎么办?

澄清:get()方法接受类型。例如,您可以像这样使用它:

import { MyService } from '..'

constructor(){
    let val = this.injector.get(MyService);
}

1 个答案:

答案 0 :(得分:1)

打字稿中的泛型仅限设计时间。在某些JS替代品中永远不会被告知。但是你要做的是,实际上是使用泛型,期望它们在javscript中编译。

换句话说,<Grid x:Name="MediaTransportControls_Timeline_Grid"> <Grid.ColumnDefinitions> <ColumnDefinition /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <Grid x:Name="MyGrid"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="*" /> <ColumnDefinition Width="Auto" /> </Grid.ColumnDefinitions> <TextBlock x:Name="MyTimeRemaining" Style="{StaticResource MediaTextBlockStyle}" Text="{Binding Text, Converter={StaticResource TimeSpanFormatConverter}, ElementName=TimeRemainingElement}" /> <Slider x:Name="ProgressSlider" Style="{StaticResource MediaSliderStyle}" Grid.Column="1" Height="33" MinWidth="80" Margin="12,0" VerticalAlignment="Center" IsThumbToolTipEnabled="False" /> <TextBlock x:Name="MyTimeElapsedElement" Style="{StaticResource MediaTextBlockStyle}" Grid.Column="2" Text="{Binding Text, Converter={StaticResource TimeSpanFormatConverter}, ElementName=TimeElapsedElement}" /> </Grid> <ProgressBar x:Name="BufferingProgressBar" Grid.ColumnSpan="3" Height="4" Margin="0,2,0,0" VerticalAlignment="Top" IsHitTestVisible="False" IsIndeterminate="True" Visibility="Collapsed" /> <Grid x:Name="TimeTextGrid" Grid.Row="1" Height="15" Margin="12,0" Visibility="Collapsed"> <TextBlock x:Name="TimeElapsedElement" Style="{StaticResource MediaTextBlockStyle}" Margin="0" HorizontalAlignment="Left" Text="00:00" /> <TextBlock x:Name="TimeRemainingElement" Style="{StaticResource MediaTextBlockStyle}" HorizontalAlignment="Right" Text="00:00" /> </Grid> </Grid> 不存在。它只会为你增加。您不能将其作为变量传递,因为它不是变量。正如我所说,这完全是虚构的。

因此,AppBarButton方法必须使用实际值调用<!--<AppBarButton x:Name="CastButton" Style="{StaticResource AppBarButtonStyle}" MediaTransportControlsHelper.DropoutOrder="7"> <AppBarButton.Icon> <FontIcon Glyph="&#xEC15;" /> </AppBarButton.Icon> </AppBarButton>--> 函数,而不是MediaTransportControls,因为它不存在。