post<T = any, R = AxiosResponse<T>>(url: string, data?: any, config?: AxiosRequestConfig): Promise<R>;
Оба дженерика имеют типы по умолчанию, а значит если их не указать именно они и будут использоватьсяaxios.post<ResponseApi>(/* ... */)
мы явно указываем, что T
- это тип ResponseApi
, а R берется по умолчанию, то есть AxiosResponse<T>
, что в нашем случае соответствует AxiosResponse<ResponseApi>
, а если и дальше развернуть, то выходит, что R
- это{
data: ResponseApi;
status: number;
statusText: string;
headers: any;
config: AxiosRequestConfig;
request?: any;
}
он и попадает в возвращаемый тип, обернутый в Promise, но TS знает про поведение await и деструктуризации, а следовательно без проблем вычисляет тип для data
- ResponseApi
Подскажите пожалуйста какова на данный момент ситуация с RustДефицит вакансий, дефицит грамотных разработчиков. Те что есть хотят много денег.
до сих пор еще дорабатывают, вышел ли в продакшен?он "вышел в продакшен" 5-6 лет назад, а насчет доработок - этот процес вечен, ну или пока язык не забросили, ну или как с Go не уперлись в собственный говнокод
Может ли на данный момент потягаться по кол-ву библиотек в web с Golang и в машинном обучении с Python?Ну так посмотрите сами: https://crates.io/
Планируется ли что-то в ближ. год/два?https://blog.rust-lang.org/2020/09/03/Planning-202...
export class MyHttpClient {
constructor(private readonly http: HttpClient) {}
put(params: Params<'body', 'arraybuffer'>): Observable<ArrayBuffer>;
put(params: Params<'body', 'blob'>): Observable<Blob>;
put(params: Params<'body', 'text'>): Observable<string>;
put(params: Params<'events', 'arraybuffer'>): Observable<HttpEvent<ArrayBuffer>>;
put(params: Params<'events', 'blob'>): Observable<HttpEvent<Blob>>;
put(params: Params<'events', 'text'>): Observable<HttpEvent<string>>;
put(params: Params<'events', 'json'>): Observable<HttpEvent<Object>>;
put<T>(params: Params<'events', 'json'>): Observable<HttpEvent<T>>;
put(params: Params<'response', 'arraybuffer'>): Observable<HttpResponse<ArrayBuffer>>;
put(params: Params<'response', 'blob'>): Observable<HttpResponse<Blob>>;
put(params: Params<'response', 'text'>): Observable<HttpResponse<string>>;
put(params: Params<'response', 'json'>): Observable<HttpResponse<Object>>;
put<T>(params: Params<'response', 'json'>): Observable<HttpResponse<T>>;
put(params: Params<'body', 'json'>): Observable<Object>;
put(params: Params<Observe, ResponseType>): Observable<unknown> {
return this.http.put(params.url, params.body, params.options as Params<'body', 'json'>['options']);
}
}
type ResponseTypeMap = {
arraybuffer: ArrayBuffer;
blob: Blob;
text: string;
json: Object;
};
type ResponseTypes = keyof ResponseTypeMap;
type ObserveWrapperMap<T extends ResponseTypeMap[ResponseTypes]> = {
body: Observable<T>;
events: Observable<HttpEvent<T>>;
response: Observable<HttpResponse<T>>;
};
type ObserveWrappers = keyof ObserveWrapperMap<ResponseTypeMap[ResponseTypes]>;
type Result<O extends ObserveWrappers, R extends ResponseTypes> = ObserveWrapperMap<ResponseTypeMap[R]>[O];
type Params<O extends ObserveWrappers, R extends ResponseTypes> = {
url: string;
body: any;
options?: {
headers?: HttpHeaders | Record<string, string | string[]>;
observe?: O;
params?: HttpParams | Record<string, string | string[]>;
reportProgress?: boolean;
responseType: R;
withCredentials?: boolean;
};
}
export class MyHttpClient {
constructor(private readonly http: HttpClient) {}
put<O extends ObserveWrappers = 'body', R extends ResponseTypes = 'json'>(params: Params<O, R>): Result<O, R> {
const {url, body, options} = params as Params<'body', 'json'>;
return this.http.put(url, body, options) as Result<O, R>;
}
}
особенно если помимо put будут и другие методы function filterObjectProps<O extends Record<string, unknown>, P extends keyof O>(obj: O, props: readonly P[]) {
const entries: [P, O[P]][] = [];
for(const prop of props) {
if(prop in obj) {
entries.push([prop, obj[prop]]);
}
}
return Object.fromEntries(entries) as {
[K in P]: O[K];
};
}
// ...
updateItem(id: string, updateItemDto: UpdateItemDto): Item {
const item = this.getItemById(id);
return {
...item,
...filterObjectProps(updateItemDto, ['name', 'lastname', 'prop1', 'prop2'])
};
}
type Animal = {
[key: string]: string;
};
type Animal = {
[<любое имя>: <тип ключей>]: <тип значений>;
};
Имя должно быть валидным идентификатором, зачем оно нужно TS - я хз, но без него не естstring | number | symbol
, притом с symbol есть траблы, там только юнион из конкретных символовtype Animal = Record<string, string>;
const useSendMessage = (): (id: number, message: Message) => void => {
const dispatch = useDispatch();
return useCallback(
(id: number, message: Message) => {
dispatch(Operation.sendMessage(id, message));
},
[dispatch]
);
};
if (correct_Login == 1 && correct_Password == 1)
total.innerHTML = Number(item.textContent) + Number(item.textContent);
в total по сути выводится последний элемент умноженный на 2.TypeError: Cannot read property 'data' of undefinedНе могу прочитать свойство data из undefined
at C:\Users\Andre\Desktop\YCH cryptowallet\node_modules\node-qiwi-api\lib\callbackApi.js:759:39в файле C:\Users\Andre\Desktop\YCH cryptowallet\node_modules\node-qiwi-api\lib\callbackApi.js
typeof entity === 'object'
Правда тут есть одно исключение - в спеке нет типа function, а во всех реализациях он есть по историческим причинам. То есть с точки зрения спеки:typeof function(){} === 'object'
а на деле:typeof function(){} === 'function'
Поэтому правильное тождество будет такое:typeof entity === 'object' || typeof entity === 'function'
1 instanceof Number
1 instanceof Object
'a' instanceof String
'a' instanceof Object
true instanceof Boolean
true instanceof Object
1n instanceof BigInt
1n instanceof Object
Symbol() instanceof Symbol
Symbol() instanceof Object
null instanceof Object
undefined instanceof Object
все эти выражения ложны, а как известно instanceof проверяет именно прототипы.Object(1) instanceof Number
Object(1) instanceof Object
Object('a') instanceof String
Object('a') instanceof Object
Object(true) instanceof Boolean
Object(true) instanceof Object
Object(1n) instanceof BigInt
Object(1n) instanceof Object
Object(Symbol()) instanceof Symbol
Object(Symbol()) instanceof Object
все эти выражения истинны.typeof Object(1) === 'object'
typeof Object('a') === 'object'
typeof Object(true) === 'object'
typeof Object(1n) === 'object'
typeof Object(Symbol()) === 'object'
это все так же истинно.Object(null)
и Object(undefined)
возвращают просто пустой объект, обратится к методам null и undefined нельзя:null.property // TypeError: Cannot read property 'property' of null
undefined.property // TypeError: Cannot read property 'property' of undefined