Skip to content

Instantly share code, notes, and snippets.

@RubaXa
RubaXa / global.ts
Last active Jun 3, 2020
globalThis globalLocation &
View global.ts
export const noop = () => {};
export const nativeGlobalThis = (0
|| typeof globalThis === 'object' && globalThis
|| typeof window === 'object' && window
|| typeof global === 'object' && global
|| {}
) as Window;
export const globalLocation = nativeGlobalThis.location || {
View mani.go
package main
import (
"fmt"
"log"
"github.com/gothing/draft"
"github.com/gothing/draft-demo/auth"
)
View scheme.go
// InitEndpointScheme - инициализация описания «конца»
func (a *AuthLogin) InitEndpointScheme(s *draft.Scheme) {
// Проект, которому принадлежит «конец»
s.Project("auth")
// Метод доступен всем
s.Access(draft.Access.All)
// Базовый метод для всех кейсов
s.Method(draft.Method.POST)
View super.go
// AuthLoginResponse — ответ на запрос
type AuthLoginResponse struct {
// инлайн комментарий с наследованием родительского
UserID types.UserID `comment:"{super}, авторизованного пользователя"`
}
View login.go
package types
type Login string
func (v Login) TypeDescription() string {
return "Login пользователя (он же email, телефон или соц. аккаунт)"
}
func GenLogin() Login {
return "fast.test@mail.ru"
View composeObjects-v2.ts
type Key = string;
type Val = string | number;
type KeyValue<
K extends Key,
P extends Key, // Дополнительные поля (!)
V extends Val,
> = (
& Record<K, V>
& Record<P, any>
);
View composeObjects-v1.ts
type Key = string;
type Val = string | number;
type KeyValue<K extends Key, V extends Val> = {
[X in K]: V;
}
type CompostedObject<KEY extends Key, T extends KeyValue<KEY, Val>[]> =
FlattenObject<
ToIntersect<
{
[K in keyof T]: T[K] extends KeyValue<KEY, Val>
View createTokensDict.ts
type Primitive = string | number | boolean | null;
type Token<N extends string, V extends Primitive> = {
name: N;
value: V;
}
type TokensDict<T extends Token<any, any>[]> =
FlattenObject<
ToIntersect<
View createObjectFromTuple.ts
type ObjectFromTuple<T extends string[]> =
FlattenObject< // 5. Делаем объект плоским
ToIntersect< // 4. Union to Intersection
{ // 2. { [key]: { [value]: value } }
[K in keyof T]: T[K] extends string
? Record<T[K], T[K]> // 1. { [value]: value }
: never
}[number] // 3. { [key]: { [value]: value } } -> { [value]: value } & { [value]: value }
>
>
View tuple-vs-const-conver.ts
// 1. Это вариант предпочтительней
function convertTupleToObject<T extends any[]>(...tuple: T) {
// ...
}
// vs
// 2. чем этот
function convertArrayToObject<T extends any[]>(array: T) {
// ...