sbi*_*nko 3 generics typescript
考虑以下使用2.6.1编译的TypeScript代码:
function foo<T> (bar: T, baz: (T) => void) {
const test: T = bar;
baz(test);
}
const string: string = "a";
foo(string, num => num.parseInt());
Run Code Online (Sandbox Code Playgroud)
我希望编译会失败,因为使用foo调用了函数string,但是传递的回调函数使用的是-中不可用的方法,string而函数签名指示回调函数中的参数类型应与相同。第一个参数的类型。
但是,代码会编译,然后在运行时失败。
我想念什么?
好吧,因为Tin baz: (T) => void不是类型名称,所以它是参数名称。
当您将语法固定为想要的含义时,您会得到预期的错误:
function foo<T> (bar: T, baz: (t: T) => void) {
const test: T = bar;
baz(test);
}
const s: string = "a";
foo(s, num => num.parseInt());
// Property 'parseInt' does not exist on type 'string'.
Run Code Online (Sandbox Code Playgroud)
当然,很难发现这样的错误-只有在将您的代码粘贴到Typescript操场并打开时,我才看到它--noImplicitAny。 (T)立即以突出显示Parameter 'T' implicitly has an 'any' type。甚至那个错误也让我感到困惑-等待什么- T不是参数,而是类型-...!
| 归档时间: |
|
| 查看次数: |
135 次 |
| 最近记录: |