我想要实现的是这样的:
function genericFunc<T>(arg: T): T {
return arg;
}
//this line won't work, but it's the essence of what I need
var stringFunc = genericFunc<string>;
stringFunc('myStr')
是否可以创建具有指定类型的泛型函数的实例?
我知道的唯一方法是创建一个界面 -
interface GenericFnInterface<T> {
(arg: T): T;
}
let stringFunc : GenericFnInterface<string> = genericFunc;
但我想避免创建太多的接口。是否有更短的方法来实现相同的
_
UPD 我发现的另一种方式是
var stringFunc: <T extends string>(arg:T) => T = genericFun;
但它仍然不完美,因为它会产生更复杂类型的混乱。
答案 0 :(得分:2)
您可以(隐式或显式)投射:
<pl.bclogic.pulsator4droid.library.PulsatorLayout
android:id="@+id/pulsator_1"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginLeft="144dp"
android:layout_marginTop="176dp"
app:pulse_count="5"
app:pulse_duration="3000"
app:pulse_repeat="0"
app:pulse_color="#FF8F00"
app:pulse_startFromScratch="false"
app:pulse_interpolator="Decelerate">
</pl.bclogic.pulsator4droid.library.PulsatorLayout>
<pl.bclogic.pulsator4droid.library.PulsatorLayout
android:id="@+id/pulsator_2"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginTop="232dp"
android:layout_marginLeft="12dp"
app:pulse_count="5"
app:pulse_duration="3000"
app:pulse_repeat="0"
app:pulse_color="#FF8F00"
app:pulse_startFromScratch="false"
app:pulse_interpolator="Decelerate">
</pl.bclogic.pulsator4droid.library.PulsatorLayout>
或
declare function identity<T>(arg: T): T; // implementation irrelevant
const x: (arg: string) => string = identity; // implicit cast
x('hello'); // ok
x(42); // error
建议使用前者,因为如果你在演员阵容中犯了错误,它会抓住你:
declare function identity<T>(arg: T): T;
const x = identity as (arg: string) => string; // explicit cast
x('hello'); // ok
x(42); // error