是否可以在TypeScript中向Enum类型添加函数?
例如:
enum Mode {
landscape,
portrait,
// the dream...
toString() { console.log(this); }
}
Run Code Online (Sandbox Code Playgroud)
要么:
class ModeExtension {
public toString = () => console.log(this);
}
enum Mode extends ModeExtension {
landscape,
portrait,
}
Run Code Online (Sandbox Code Playgroud)
当然这个toString()函数会包含类似a的东西switch但是一个用例会沿着以下几行流动:
class Device {
constructor(public mode:Mode) {
console.log(this.mode.toString());
}
}
Run Code Online (Sandbox Code Playgroud)
我理解为什么扩展一个enum可能是一个奇怪的事情,只是想知道它是否可能.
最近我一直试图把我的React组件写成"Pure Functions",我注意到有时候我想要的东西感觉很像state.我正考虑将我state的第二个参数传递给我的组件.我可以通过使用两个参数调用我的组件作为普通函数来实现这一点,props并且state.
例如:
// abstracted to it's own module
const useState = (Component, state = {}) => {
return class extends React.Component {
state = createState(this, state); // will traverse and update the state
render() {
const { props, state } = this;
return Component(props, state); // <-- call the Component directly
}
};
};
const Component = (props, { index, increase }) => (
<div onClick={increase} {...props}>
Click me to increase: …Run Code Online (Sandbox Code Playgroud) 我最近开始学习F#,因为我对大多数功能概念都很陌生,所以我倾向于为自己写一些小例子,并用测试结果检查我的前提.
现在我似乎无法理解以下代码的结果以及它为什么会这样表现.使用案例:我掷四个六面骰子,只有当它们的总和大于20时才返回它们的总数.
这是我的代码:
let rnd = System.Random()
let d6 () = rnd.Next(1, 7)
let rec foo () =
// create a list of 4 d6 throws and print out the list
let numbers = seq { for i in 1 .. 4 -> d6() }
numbers |> Seq.iter( fun n -> printf "%i " n )
printfn "\n"
// sum the list and return the sum only when the sum is greater than 20
let total = numbers |> Seq.sum …Run Code Online (Sandbox Code Playgroud) 我正在尝试构建一种方法来创建可以生成 DOM 事件的生成器。更一般地说,我想创建一种将事件系统转换为产生事件的异步系统的方法。
我的初始代码示例有效,但我可以看到resolve从 Promise 中提升该函数的问题,以便在事件进入后我可以调用该函数。
class EventPropagation {
constructor(id) {
const button = document.getElementById(id);
let _resolve;
button.addEventListener("click", event => {
if (_resolve) {
_resolve(event);
}
});
let _listen = () => {
return new Promise(resolve => {
_resolve = resolve;
});
}
this.subscribe = async function*() {
const result = await _listen();
yield result;
yield * this.subscribe();
}
}
}
async function example() {
const eventPropagation = new EventPropagation("btn");
for await (const event of eventPropagation.subscribe()) {
console.log(event); …Run Code Online (Sandbox Code Playgroud)