typescript的重载(Overload)

重载允许函数(方法)接收不同类型或数量的参数时,做出不同的处理。 js本身作为动态脚本语言是支持重载的,typescript的重载更多的是类型系统的补全。 函数 function func(arg: number): number; function func(arg: string): string; function func(arg: number | string): number | string { if (typeof arg === "number") { return 0; } return "0"; } lambda lambda的重载需要通过定义 type 实现。 type TFunc = { (x: number): number; (x: number, y: string): string; }; export const func: TFunc = (x: number, y = ""): any => { if (y) { return `optional: ${y}`; } return x; }; 方法 静态方法 class C { static method(arg: string): string; static method(): void; static method(arg?...

October 5, 2021 · 2 min · zakudriver

Elisp中的interactive参数

interactive 参数的含义 若一个函数带有交互模式声明,则它是一个命令函数。即可以通过 M-x(execute-command) 来调用。 声明格式 (defun kumo-interactive-func () (interactive "code-string") ;; do something...) 种类 Completion: 提供补全。TAB,SPC 和 RET 完成补全。 Existing: 必须是存在的对象名。不接受无效名称。如果输入无效则不会退出 minibuffer。 Default: 如果未输入则使用默认值。 No I/O: 不读取任何输入。因此不会使用提示符。 Prompt: 放在提示符或\n之前。 Special: 只能放在交互式字符参数前。 含义 接收多个输入以 \n 来分隔。 *: 如果当前buffer处于read-only-mode时提示。 [Special] @: 在第一个鼠标事件触发的window调用。[Special] ^: 通过 shift 调用前需要标记区域,没有公共 shift 调用则停止标记。[Special] a: 一个函数定义的符号名。[Existing, Completion, Prompt] (defun with-func-arg (arg) (interactive "aEnter a function:") (funcall arg)) b: buffer名(已存在)。[Existing, Completion, Default, Prompt]...

July 20, 2021 · 2 min · zakudriver

golang并发写slice

package sliceSafe type SliceSafe struct { channel chan int `desc:"即将加入到数据slice的数据"` data []int `desc:"数据slice"` } // 新建一个size大小缓存的active object对象 func New(size int, done func()) *SliceSafe { s := &SliceSafe{ channel: make(chan int, size), data: make([]int, 0), } go func() { s.schedule() done() }() return s } // 把管道中的数据append到slice中 func (s *SliceSafe) schedule() { for v := range s.channel { s.data = append(s.data, v) } } // 增加一个值 func (s *SliceSafe) Add(v int) { s....

May 21, 2021 · 1 min · zakudriver

typescript常用的泛型

函数参数类型 type TFuncParameterType<T> = T extends (arg: infer P) => void ? P : string; // e.g function func(arg: string) {} type TParamsType = TFuncParameterType<typeof func>; // string 函数返回值类型 type TFuncReturnType<T> = T extends (arg: any) => infer P ? P : string; // e.g function func(arg: string): number {} type TReturnType = TFuncReturnType<typeof func>; // number 元祖成员作为键约束 const keys = ["a", "b", "c"] as const; type TKeysMap = Record<typeof keys[number], string> // KeysMap: { a: string; b: string; c: string; } 数组元素类型 type ArrayElement<T extends readonly unknown[]> = T extends readonly (infer P)[] ?...

May 21, 2021 · 4 min · zakudriver

H5复制文字到剪切板

// 复制文字 // copyText('h5实现一键复制到粘贴板 兼容ios') /*兼容性补充: 移动端: 安卓手机: 微信(chrome)和几个手机浏览器都可以用。 苹果手机: 微信里面和sarafi浏览器里也都可以, PC: sarafi版本必须在10.2以上,其他浏览器可以. */ export function copyText(text: string | number) { // number类型没有 .length 不能执行selectText 需要转化成字符串 const textString = text.toString(); let input: HTMLInputElement | null = document.querySelector('#copy-input'); if (!input) { input = document.createElement('input'); input.id = 'copy-input'; input.readOnly = true; // 防止ios聚焦触发键盘事件 input.style.position = 'absolute'; input.style.left = '-1000px'; input.style.zIndex = '-1000'; document.body.appendChild(input); } input.value = textString; // ios必须先选中文字且不支持 input.select(); selectText(input, 0, textString....

August 6, 2020 · 1 min · zakudriver