我有一个通用类import matplotlib.pyplot as plt
# plotting the points
n = [1,50, 250, 1000, 5210]
m = [1,2,3,4,5]
plt.plot(n, m)
# naming the x axis
plt.xlabel('X')
# naming the y axis
plt.ylabel('Y')
# giving a title to my graph
plt.title('test')
plt.xticks(n)
plt.show()
,其中包含方法C<T>
,期望参数为f
。
T
我想增加覆盖此参数类型的功能:
let c = new C<string>();
c.f('a'); // should work
c.f(1); // shouldn't work
问题是我无法弄清楚此函数签名的外观。
我尝试了这两种解决方案:
c.f<number>(1) // should work
但在两种情况下ts都允许class C<T> {
f<O = T>(arg: O) {}
}
class C<T> {
f<O>(arg: O extends undefined ? T : O) {}
}
,我不想这么做。
答案 0 :(得分:1)
Typescript将基于参数推断类型参数。有一个建议使非推论参数,但这已经有一段时间没有动了,但是我们可以使用该主题的GH issue中建议的解决方法。这种NoInfer
类型会使编译器感到困惑,以至于放弃了从特定参数进行推断的过程。
如果typescript无法推断类型参数,它将回退默认类型,约束或unknown
。我们可以使用默认类型来指定一个可能对该参数无效的值(我们也可以使用never
,但是字符串消息通常会更有用)
type NoInfer<T> = [T][T extends any ? 0 : never];
class C<T> {
f(arg: T): void
f<O = "No explict type parameter was provided">(arg: NoInfer<O>) : void
f(arg: unknown) {}
}
let c = new C<string>();
c.f('a'); // works
c.f(1); // does not work
c.f<number>(1) // works
答案 1 :(得分:0)
您可以这样使用它
<script src="https://code.jquery.com/jquery-1.11.2.min.js" type="text/javascript"></script>
<div id="content">
<h3>Example One</h3>
<h3>Example Two</h3>
<h3>Example Three</h3>
</div>
<div id="sidemenu-container">
<div class="wpb_wrapper">
<div class="wpb_wrapper">
</div>
</div>
</div>