我想当属性键以目标字符串开头时,应从原始类型中过滤新的对象类型。
产地类型:
type Origin = {
a: string,
b: string,
_c: string,
_d: string,
}
Run Code Online (Sandbox Code Playgroud)
我想要的结果类型:
// type Result = SomethingWork<Origin, '_'>;
type Result = {
a: string,
b: string
};
Run Code Online (Sandbox Code Playgroud)
Origin 类型具有动态属性键。所以如果直接使用类型,这是不正确的'_c' | '_d'
以下代码不起作用:
function deco<T>(){
return function(target, key){
// before
// target[key] = new Decorated<T>();
// edited
Object.defineProperty(target, key, {
get(){
return new Decorated<T>();
}
});
}
}
class Decorated<T> {
set(values: T){
}
}
class MyDecos {
@deco<{a: number}>() a;
@deco<{b: string}>() b;
}
const test = new MyDecos;
test.a.set(); // want to throw error
test.a.set({a: '1'); // want to throw error
test.b.set({b: 1); // want to throw error
Run Code Online (Sandbox Code Playgroud)
通用有什么问题吗?显示助手values: any
我想要Test.set使用装饰器中的泛型的方法
HttpClient.get<Response>()
返回Observable<HttpEvent<Response>>,对吗?
HttpClient.get<Response>().subscribe
返回HttpEvent<Response>,对吗?
Response是一个数组。但我不能使用array.prototype方法
如果我上面的陈述是正确的,我应该使用any类型断言来修复错误吗?或使用 re-type cast insubscribe来使用泛型?
添加和编辑:
export class Test {
constructor(public httpClient: HttpClient) {
}
get<T>(path: string, option?): Observable<T> {
// Observable<HttpEvent<T>> is not assignable to type Observable<T>
return this.httpClient.get<T>(path, option);
}
}
Run Code Online (Sandbox Code Playgroud)