假设我有一个界面A:
interface A {
foo: number
bar: string
}
Run Code Online (Sandbox Code Playgroud)
我有一个通用类型Option:
type Option<T> = {
map: () => T
}
Run Code Online (Sandbox Code Playgroud)
然后我B从A和创建一个新的界面Option:
interface B {
foo: Option<number>
bar: Option<string>
}
Run Code Online (Sandbox Code Playgroud)
如何让这个操作更通用?IE浏览器.我想要的API是:
type B = Lift<A>
Run Code Online (Sandbox Code Playgroud)
在哪里Lift自动将每个成员映射A到一个Option.请注意,A可以包含任意类型的任意数量的成员.
我该如何实施Lift?如果在TypeScript中无法做到这一点,那么有没有人有Scala/Haskell解决方案?
查看 Monaco 示例和类型,看起来可以通过defineThemeAPI配置主题。我正在尝试将 VSCode 主题应用于 Monaco 实例,并且正在努力解决如何设置背景颜色(对于整个编辑器,而不仅仅是令牌)。
规则被定义为具有以下形状的对象数组:
IThemeRule {
token: string;
foreground?: string;
background?: string;
fontStyle?: string;
}
Run Code Online (Sandbox Code Playgroud)
token设置编辑器背景应该是什么?
更一般地说,有没有一种好方法可以将此主题应用于 Monaco 实例,而无需从 VSCode 源代码中删除主题解析逻辑?在快速尝试删除逻辑之后,似乎一个简单的自定义解析器(即解析 JSON 主题定义 -> IThemeRules 的平面列表)是更好的方法。
我正在针对新范围手动编译模板:
var scope = _.assign($rootScope.$new(true), {
foo: 1,
bar: 2
})
var element = angular.element('<my-element foo="foo" bar="bar"></my-element>')
$compile(element)(scope)
element.appendTo(container)
Run Code Online (Sandbox Code Playgroud)
运行基本配置文件后,此代码的最慢部分是$compile每次编译需要大约1毫秒.当用户滚动时,我需要一次编译~100个元素.
在第一轮$ compiles之后,我可以应用很多优化来加速编译,但我想加快第一轮100次编译.我还希望将模板保留在Angularland中,并避免注入原始HTML.
怎么样?
编辑:从下面复制+粘贴我的评论,以查看将来看到此主题的任何人的可见性:
好吧,它终于有道理了.如果将函数作为第二个参数传递给$ link,angular将为您克隆节点.如果不这样做,它将在每次调用$ link时重用相同的节点.无论哪种方式,您都可以同步访问返回的节点(作为$ link的返回值)和异步访问(在回调中).这是一个设计不佳的API,我在Angular的问题跟踪器中提出了一个问题 - github.com/angular/angular.js/issues/11824
javascript frontend angularjs angularjs-directive angularjs-scope
我正在使用monaco-editor,我正在尝试为Command + Enter添加自定义处理程序.但是当我按下命令键时,会显示Monaco上下文菜单.是否可以禁用上下文菜单,或将其重新绑定到另一个键?
我有一个Notification类来管理从UI创建/删除通知.我可以成功显示/隐藏通知,但通知不会动画输入/输出.
import React from 'react'
import addons from 'react/addons'
const ReactCSSTransitionGroup = React.addons.CSSTransitionGroup
let id = 0
export default class Notification {
constructor (content, className) {
let div = document.createElement('div')
document.body.appendChild(div)
let onClose = () => React.unmountComponentAtNode(div)
React.render(
<NotificationElement className={ className } id={ id++ } onClose={ onClose }>
{ content }
</NotificationElement>,
div
)
}
}
class NotificationElement extends React.Component {
constructor(_) {
super(_)
}
render() {
const className = `Notification ${ this.props.className }`
return (
<ReactCSSTransitionGroup transitionName="slideIn"> …Run Code Online (Sandbox Code Playgroud) 的Java,C#和打字稿(亦称语言的太阳/ Hejlsberg家庭)使用T,U,V等来表示泛型类型参数.表面上看,因为T代表"类型",U并且V遵循T字母表.
在另一方面,Scala的使用A,B,C等,和OCaml中和Haskell使用a,b和c.
这些惯例来自哪里?难道是因为函数式语言更接近数学证明,在那里?,?和?被用约定?
类似,但没有回答我的问题:C#泛型命名约定来自哪里?.
给定这种类型的构造函数:
data DatabaseItem = DbString String
| DbNumber Integer
| DbDate UTCTime
Run Code Online (Sandbox Code Playgroud)
我可以编写一个函数来解包a DatabaseItem,例如UTCTime:
getDate :: DatabaseItem -> Maybe UTCTime
getDate (DbDate a) = Just a
getDate _ = Nothing
Run Code Online (Sandbox Code Playgroud)
我不想为3个数据构造函数中的每一个编写这样的函数,而是想要一个通用函数(这也意味着我不再需要它Maybe),但是我无法弄清楚如何编写它.我试过了:
unwrap :: DatabaseItem -> a
unwrap (i a) = a
-- error: Parse error in pattern: i
Run Code Online (Sandbox Code Playgroud)
和:
unwrap :: DatabaseItem -> String | Integer | UTCTime
unwrap (DbString a) = a
unwrap (DbDate a) = a
unwrap (DbNumber a) = a
-- error: …Run Code Online (Sandbox Code Playgroud) javascript ×4
haskell ×2
scala ×2
angularjs ×1
c# ×1
frontend ×1
generics ×1
java ×1
purescript ×1
reactjs ×1
types ×1
typescript ×1