我想从传递给函数的s=df.notnull().iloc[:,::-1].idxmax(1)
df['num1']=df.lookup(df.index,s)
df['check']=s.str.strip('ID')
s=pd.wide_to_long(df,'ID',['Node','num1','check'],j='drop').dropna().reset_index()
s=s.loc[s.check!=s.drop,['ID','num1','Node']]
s
Out[459]:
ID num1 Node
0 1.0 3.0 YYZ
1 2.0 3.0 YYZ
3 4.0 7.0 DFW
4 5.0 7.0 DFW
5 6.0 7.0 DFW
7 20.0 21.0 DEN
9 100.0 106.0 BOS
10 101.0 106.0 BOS
11 102.0 106.0 BOS
12 103.0 106.0 BOS
13 104.0 106.0 BOS
14 105.0 106.0 BOS
关键字推断当前类的类型。由于某种原因,当我将this
作为参数传递给函数时,TypeScript推断类型参数T为this
而不是当前的类类型。
下面有一个示例我正在尝试做。我希望this
和B
类都具有类型为C
的{{1}},但是传递时C类中的field
是number
field
作为参数。手动指定类型时,一切正常(GenericArguments<this>
类示例),但是从this
推断类型不会给出我想要的结果。
B
我是否需要一些其他关键字来强制TypeScript使用当前类类型而不是多态this
?还是有其他方法可以实现这一目标?
答案 0 :(得分:0)
this
与类的类型不同。它具有特殊类型,即多态this
类型。多态this
类型表示当前类的类型,无论当前类的类型如何,从外部将其视为。例如,这可行:
class A {
getThis() { return this; }
getA(): A { return this; }
}
class B extends A {
method() { }
}
var b = new B();
b.getThis().method(); // ok since polymorphic this is seen as B from the outside
b.getA().method(); // err since we are accessing on A
在类内部,这具有不幸的副作用,即this
类型必须表现为未解析的类型参数(当前类为extends
的一个参数)。这是由于this
的最终类型确实尚未完全知道。
由于多态this
类型的行为类似于未解析的类型参数,因此typescript在条件类型中对其的处理方式非常有限。 Typescript通常不会解析仍包含未解析类型参数的条件类型。
从类外部,field
的类型将被正确解析,因为多态this
被解析为我们访问field
的任何类型。如果something
的类型被派生类缩小(可能的话),我们甚至可能会感到惊讶:
class C extends A<number> {
field = test(this); // <-- field has a type: GenericArgument<this>
}
new C().field // is number
class D extends C {
something!: 1
}
new D().field // is of type number literal type 1
使用字段编号明确的解决方法可能是最简单的方法。