我正在使用 TypeScript 泛型来指定函数接受的参数类型。如下所示,Foo
和 Bar
都有一个名为 isDirectory
的函数,但在通用函数中似乎无效。谁能解释一下我在这里缺少什么?
class Foo {
isDirectory(): boolean {
return true;
}
}
class Bar {
isDirectory(): boolean {
return true;
}
}
type XYZ = Foo | Bar;
function bas<XYZ>(x: XYZ) {
!!!!!!!! Property 'isDirectory' does not exist on type 'XYZ'.(2339)
return x.isDirectory();
}
我知道我可以用 extends
扩展泛型类型,但为什么在这种情况下需要呢?有没有不用手动输入界面的解决方案?
答案 0 :(得分:2)
您对多个事物使用相同的名称。因此,虽然您认为 SELECT B.trans_id, B.[name]
FROM dbo.TableB B
WHERE EXISTS(SELECT 1
FROM dbo.TableA A
WHERE A.ID_Trans = B.trans_id); --Odd that it's called ID_Trans in one table, and Trans_ID in another
都是相关的,但实际上并非如此。让我给它们起个独特的名字,这样就清楚什么是什么:
XYZ
函数 type XYZ = Foo | Bar;
function bas<T>(x: T) {
return x.isDirectory();
}
是一个泛型,它接受任何类型的 bas
。它与您之前定义的几行的 XYZ 没有关系。由于 T
可以是任何东西(例如,T
),因此不能保证它会有 number
函数。
您可能想要做的是限制 isDirectory
使其只能是 T
或从它扩展的某些内容:
XYZ