小编k0p*_*kus的帖子

如何让 phpstan 推断我的 Laravel Collection 管道的类型?

鉴于我的班级

<?php
declare(strict_types=1);

use Illuminate\Support\Collection;
use stdClass;

class PhpstanIssue
{
    /**
     * @param Collection<Collection<stdClass>> $collection
     *
     * @return Collection<Foo>
     */
    public function whyDoesThisFail(Collection $collection): Collection
    {
        return $collection
            ->flatten() // Collection<stdClass>
            ->map(static function (\stdClass $std): ?Foo {
                return Foo::get($std);
            }) // should now be Collection<?Foo>
            ->filter(); // should now be Collection<Foo>
    }
}
Run Code Online (Sandbox Code Playgroud)

我非常困惑为什么 phpstan (0.12.64) 会失败:

18: [ERROR] Method PhpstanIssue::whyDoesThisFail() should return
Illuminate\Support\Collection&iterable<Foo> but returns 
Illuminate\Support\Collection&iterable<Illuminate\Support\Collection&iterable<stdClass>>. (phpstan)
Run Code Online (Sandbox Code Playgroud)

为什么 phpstan 无法推断出该管道的正确结果类型?如何让 phpstan 理解管道?


我可以验证我的代码在 phpunit 测试用例中是否有效:

class MyCodeWorks extends TestCase …
Run Code Online (Sandbox Code Playgroud)

php laravel illuminate-container phpstan

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

如何绑定字体真棒图标上的事件?

我想click在一个字体真棒图标上绑定事件.然而,图标本身不可点击,只有当我插入其他文本时,该文本才会被绑定.

如何绑定图标本身?

<span class="icon-star">
    only this text is clickable, the icon itself is not
</span>

<script type="text/javascript">
(function($) {
    $('span.icon-star').on('click', function() {
        console.log($(this));
    });
})(jQuery);
</script>
Run Code Online (Sandbox Code Playgroud)

jquery font-awesome

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

如何绘制透明线?

我正在JPanel上画一条蓝线

public void paint(Graphics g) {
    Graphics2D g2 = (Graphics2D) g;

    super.paint(g2);

    if (path.size() >= 2) {
        BasisStroke stroke = new BasicStroke(Config.TILE_SIZE_IN_PIXEL / 3, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL);
        g2.setStroke(stroke);
        g2.setPaint(Color.BLUE);
        g2.setPaintMode();

        for (int i = 0; i < path.size() - 1; i++) {
            g2.drawLine(path.get(i).x, path.get(i).y, path.get(i + 1).x, path.get(i + 1).y);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但我希望这条线是半透明的.我如何实现这一目标?

java transparency line jpanel graphics2d

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

我可以配置PhpStorm自动添加使用语句来复制和粘贴代码块吗?

当我在phpstorm中编写代码时,它会在我从自动完成中选择一个类时添加use语句.

所以写作$pagerfanta = new Pagerfanta(new DoctrineORMAdapter($query));将添加两个用语:

use Pagerfanta\Pagerfanta;
use Pagerfanta\Adapter\DoctrineORMAdapter;
Run Code Online (Sandbox Code Playgroud)

然而,当我将包含的块复制粘贴或提取$pagerfanta = new Pagerfanta(new DoctrineORMAdapter($query));到新类时,将不会添加use语句.PhpStorm通过添加不同的背景颜色将它们显示为缺失.

尽管如此,我经常忘记添加use语句,因此我想知道,如果我可以配置PhpStorm在复制粘贴时为我添加这些use语句.

ide configuration autocomplete phpstorm

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

如何告诉作曲家使用我的分支?

在symfony2项目中,我使用的是"jms/serializer-bundle",我的一个依赖项存在问题,即 jms/metadatalibary.我已经分叉了元数据库并在bugfix-doctrine-proxy分支中包含了一个修复程序.

现在我想知道如何告诉作曲家,在需要依赖时它应该使用我的分支?

序列化程序库的composer.json:

{
    "name": "jms/serializer",
    "type": "library",
    ...
    ],
    "require": {
        "php": ">=5.3.2",
        "jms/metadata": "~1.1",
        "jms/parser-lib": "1.*",
        "phpcollection/phpcollection": "~0.1",
        "doctrine/annotations": "1.*"
    },
    ...
}
Run Code Online (Sandbox Code Playgroud)

我的symfony2-project composer.json:

{
    ...
    "repositories": [
        {
            "type": "git",
            "url": "git@github.com:hauptsacheNet/metadata.git"
        }
    ],
    "require": {
        "jms/serializer-bundle": "dev-master",
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

php dependency-management symfony composer-php

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

如何避免冗余和冗长的if-else结构?

编写此代码是否有更简单,更有效的方法?这是一个计算吸烟成本的计算器.

必须有一种方法可以跳过所有ifelif标签,并使其成为一个循环并节省几分钟的代码输入,甚至可能有一个"标准"如何输入我错过的代码.

how_many = int(input('How many ciggaretes do you smoke each day?\n'))

per_package = int(input('How much does your package cost?\n'))

contain = int(input('How many ciggaretes does the package contain?\n'))

cost_st = per_package / contain

choice = input('Do you want to calculate the cost per "Day (D)" / "Week (W)" / "Year (Y)" / "Decade (DE)"?\n')

if choice == 'D':
    cost_day = cost_st * how_many
    print("It will cost", cost_day ,"kr per day.")

elif choice == 'W':
    cost_week …
Run Code Online (Sandbox Code Playgroud)

python

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

点击表单中的提交按钮后如何显示隐藏的div?

我有一个带有提交按钮的简单 HTML 表单。点击此按钮后,我想查看div#my_id以前不可见的内容。

<input type="submit" name="xxx" value="yyy" onclick="document.getElementById('my_id').style.display = 'block' ;">

<div id="my_id" style="display: none"> My text </div>
Run Code Online (Sandbox Code Playgroud)

我怎样才能让它发挥作用?

javascript

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

使用tslint时如何忽略*.d.ts文件?

我想在我的工作流程中添加tslint.我通过以下方式安装:

npm install tslint tslint-config-ms-recommended --save-dev
Run Code Online (Sandbox Code Playgroud)

tslint.json看起来像:

{
    "extends": "tslint-config-ms-recommended"
}
Run Code Online (Sandbox Code Playgroud)

然而,当我跑:

./node_modules/.bin/tslint src/**/*.ts
Run Code Online (Sandbox Code Playgroud)

它还会检查很多明确键入的文件,例如:

src/interfaces/highland.d.ts[621, 1]: space indentation expected
src/interfaces/highland.d.ts[622, 1]: space indentation expected
src/interfaces/highland.d.ts[635, 1]: space indentation expected
Run Code Online (Sandbox Code Playgroud)

污染输出.

我想只检查我的*.ts文件,并且正在寻找忽略其他类型的方法.

我看到有一个--exclude选项,但它在运行时仍显示d.ts文件:

./node_modules/.bin/tslint src/**/*.ts --exclude src/**/*.d.ts
Run Code Online (Sandbox Code Playgroud)

typescript tslint

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

如何创建我的自定义tslint规则集?

我想介绍一个可以在多个项目中共享的打字稿编码指南.我不想复制粘贴tslint.json多次,它已经发生了,我们已经发布了它的分歧版本.

我想以我的指南为基础tslint:recommended.我看到tslint语法允许extend,但我不清楚它的用法以及如何构造这样的包.

这样的项目可以仅仅是一个tslint.json本身,还是我需要导出一个模块?

我希望包然后在npm/sinopia实例上托管,但我不确定如何继续.

code-standards npm typescript tslint

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

如何将require转换为第三方库的import语句?

在我的打字稿项目中,我使用:

const program = require('commander');
const figlet = require('figlet');
const AWS = require('aws-sdk');
Run Code Online (Sandbox Code Playgroud)

并且我想重构这些行以使其工作import,以遵守 tslint 的no-var-requires规则。然而,它应该工作的方式让我望而却步。

对于 figlet,我都尝试了:

import figlet from 'figlet';
import * as figlet from 'figlet';
Run Code Online (Sandbox Code Playgroud)

然后我得到:

 bin/console.ts(1,20): error TS2307: Cannot find module 'figlet'.
Run Code Online (Sandbox Code Playgroud)

我该如何导入这些库?

typescript tslint

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