小编Bru*_*der的帖子

使用“匿名”方法实现接口

鉴于以下界面Fn

interface Fn<A> {
    (): A
}
Run Code Online (Sandbox Code Playgroud)

可以使用构建器实例化实现接口的对象

function buildFn<A>( val: A ): Fn<A> {
    return () => { return val }
}
Run Code Online (Sandbox Code Playgroud)

现在,使用以下在 Typescript 中有效的接口

interface FnString extends Fn<string> {
    (): string
    toLowerCase(): string
}
Run Code Online (Sandbox Code Playgroud)

我如何编写一个构建器函数来实例化一个实现的对象FnString

编辑:解决方案感谢@basarat

注意:重构String->string根据评论

function builderFn(str: string): FnString {
    var fn = <FnString>(() => str)
    fn.toLowerCase = str.toLowerCase
    return fn
}
Run Code Online (Sandbox Code Playgroud)

typescript

5
推荐指数
1
解决办法
2547
查看次数

自动生成环境模块声明

鉴于这2个打字稿文件

api/Token.ts

interface Token { 
    code: string
}
export default Token
Run Code Online (Sandbox Code Playgroud)

index.ts

export * from './api/Token'
Run Code Online (Sandbox Code Playgroud)

tsc 1.5与--declarations交换机将生成两个.d.ts文件(具有相似的内容)

api/Token.d.ts

interface Token { 
    code: string;
}
export default Token;
Run Code Online (Sandbox Code Playgroud)

index.d.ts

export * from './api/Token';
Run Code Online (Sandbox Code Playgroud)

使用以下选项运行grunt-dts-bundle

    dts_bundle: {
        release: {
            options: {
                name: 'my-module',
                main: 'index.d.ts'
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

将生成具有my-module.d.ts以下内容的环境模块声明文件

declare module 'my-module' {
    export * from './api/Token';
}
Run Code Online (Sandbox Code Playgroud)

但是,由于以下原因,此声明无法编译: Import or export declaration in an ambient module declaration cannot reference module through …

scripting module typescript

5
推荐指数
1
解决办法
2269
查看次数

Typescript:使用泛型扩展类型的泛型

说我有一个界面

interface Applicative<T> {}
Run Code Online (Sandbox Code Playgroud)

现在我想定义一个函数f:

  • 采用一个函数并采用类型U扩展Applicative包装Any
  • 并返回一个U包装函数

如何在Typescript中定义它?

 function f<U extends Applicative>(fn: Function, a: U<any>): U<Function>
Run Code Online (Sandbox Code Playgroud)

是我天真的尝试,但这是无效的

typescript

5
推荐指数
1
解决办法
3705
查看次数

一个没有存在类型的异构索引结构?

我正在尝试构建异构索引结构并提出以下解决方案,但我被告知不要使用存在类型.

你能看到更好的解决方案吗?

我想保持接口定义(typeclass)与具体实现(datainstance)之间的分离.编辑以下@ hammar的评论:在实际应用程序中,值不是Shown,而是简单地存储查询; myData附加记录也更复杂.

如果这可以带来更好的解决方案,那么确切的要求是构建地图地图(内部地图).每个内部地图都是同质的,Map String a但是每个内部地图可以为其值强制执行不同的类型.您可能还将其视为两级索引结构.实现不必使用Data.Map但必须高效.

{-# LANGUAGE ExistentialQuantification #-}
module Scratch.SO_ExtistentialTypes where

import Data.Map

data HeteroValue = forall a. Show a => HV a 

instance Show HeteroValue where
    show (HV b) = show b

type MyMap = Map String HeteroValue

class MyClass c where 
    getMyMap :: c -> MyMap

data MyData = MyData {
    myMap ::  MyMap
} …
Run Code Online (Sandbox Code Playgroud)

haskell existential-type

4
推荐指数
2
解决办法
763
查看次数

gradle:插件任务`dependsOn`另一个插件任务失败

测试 gradle 作为 maven 的替代品,我们有一个 build.gradle 文件,其中包含以下插件

buildscript {
    repositories {
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath "com.moowork.gradle:gradle-grunt-plugin:0.6"
        classpath 'org.akhikhl.gretty:gretty:+'
    }
}

apply plugin: 'scala'
apply plugin: "com.moowork.grunt"
apply plugin: 'war'
apply plugin: 'org.akhikhl.gretty'
Run Code Online (Sandbox Code Playgroud)

./gradlew appStart./gradlew grunt_dev从控制台正常运行。

但是在添加行时

appStart.dependsOn grunt_dev

到脚本,./gradlew appStart失败

Could not find property 'appStart' on root project 'blah'.

为什么appStart任务从 gradle 包装器中可见,而不是在脚本中?

grtty appStart 上的文档

更新

按照下面的@Opal 解释,以下内容允许将任务连接在一起

//Tasks defined in plugins are added after all projects are evaluated
//We …
Run Code Online (Sandbox Code Playgroud)

gradle gretty

4
推荐指数
1
解决办法
2156
查看次数

为tomcat/JKS Keystore转换PKCS12格式的证书

我有来自GlobalSign Authority的以下通配符证书文件.

root.crt
intermediate.crt
private.key 
Run Code Online (Sandbox Code Playgroud)

我想使用上面的cert文件配置tomcat HTTPS.我相信Tomcat支持PKCS12格式.

如何转换PKSC12格式的证书文件?我如何在tomcat密钥库中导入它们,特别是中间证书?

linux ssl webserver tomcat

3
推荐指数
1
解决办法
1万
查看次数

我应该依赖复制省略还是移动语义?

给出一个矢量

std::vector<BigObject> v;
Run Code Online (Sandbox Code Playgroud)

和工厂功能

BigObject genBigObject();
Run Code Online (Sandbox Code Playgroud)

我想避免复制BigObject实例.

哪一个更快?

v.push_back(genBigObject());
Run Code Online (Sandbox Code Playgroud)

要么

v.push_back(std::move(genBigObject()));
Run Code Online (Sandbox Code Playgroud)

我可以依靠复制省略将事实八方通发生的呢?(我可以删除复制构造函数BigObject,但是,好吧......)

c++ c++17

2
推荐指数
1
解决办法
116
查看次数

存在类型.为异构映射编写类的实例

使用以下类型和类定义,我不明白为什么我在创建instance下面时得到错误.

我需要MyMap来保存异构值的映射.

{-# LANGUAGE ExistentialQuantification #-}
module Scratch.SO_ExtistentialTypes where

import Data.Map

type MyMap a = Map String a

class MyClass c where 
    getMyMap :: forall a. c -> MyMap a

data MyData = forall a. MyData {
    myMap ::  MyMap a
}

instance MyClass MyData where
    getMyMap = myMap -- <= ERROR
Run Code Online (Sandbox Code Playgroud)

haskell existential-type

1
推荐指数
1
解决办法
283
查看次数