问题标签 [type-narrowing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
343 浏览

java - 在 Golang 中最小化接口

在 golang 中,接口对于解耦和组合代码非常重要,因此,一个高级的 go 程序可能很容易定义 1000 多个接口。

我们如何随着时间的推移发展这些接口,以确保它们保持最小?

  • 是否有常用的 go 工具来检查未使用的功能?

  • 是否有使用类似于 java's 注释 go 函数的最佳实践@Override,以确保声明的函数正确实现预期的合同?

通常在 java 语言中,很容易将代码紧密绑定到接口规范,因为高级工具允许我们查找和删除根本没有引用的函数(通常在任何常见的 IDE 中都会自动为您突出显示)。

0 投票
1 回答
346 浏览

java - 如果在三元运算符中使用局部变量,为什么从 int 到 short 的缩小转换不起作用

0 投票
1 回答
1056 浏览

c++ - 为什么 int 被缩小到浮动?

举个例子:

编译器(clang,msvc)不编译这个(GCC 编译,但有警告)non-constant-expression cannot be narrowed from 'int' to 'float' in initializer list:.

int为什么编译器说缩小到什么float时候float更宽int

0 投票
1 回答
706 浏览

php - 通过 PHPdoc 缩​​小抽象方法继承的返回类型会导致 PHP 错误

假设我们在 PHP 中有以下继承链

以及一堆镜像相同继承链的其他类

PHP 抱怨抽象方法getEntity要么必须正确实现(并松散abstract关键字),要么不能重新声明。我可以理解为什么 PHP 会抱怨,因为尽管有 PHPdoc 注释,但方法签名与EntitySerializer.

但是,我想以某种方式说明扩展RealEntitySerializerPseudoEntitySerializer不得返回任意实例Entity但将返回类型缩小为RealEntityPseudoEntity相应的子类。

特别是,如果我从中间类中省略重新定义方法及其对应的 PHPdoc 以使 PHP 快乐,我的 IDE 正确地假设RealEntitySerializer::getEntityPseudoEntitySerializer::getEntity允许返回Entity. 因此,我的 IDE 抱怨说,如果我调用特定于某个对象的中间类之一的方法,该对象由RealEntitySerializer::getEntityPseudoEntitySerializer::getEntityresp 返回。

如何实现这两个目标?(a) 由 PHP 解释且没有错误并且 (b) 正确记录的代码。

0 投票
1 回答
49 浏览

c++ - 两个UShorts之间的操作在VC2015中给出了一个int?

以下代码error C2397: conversion from 'int' to 'ushort' requires a narrowing conversion在使用 Visual Studio 2015 编译时会出现错误。

该表达式a | b似乎int在一种情况下返回 a ushort,在另一种情况下返回 a 。

我无法理解这一点。
你能解释一下这里发生了什么吗?


PS:确切的编译器版本:Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86

0 投票
1 回答
988 浏览

c++ - 如何在 CodeBlocks 中启用缩小警告?

我正在使用代码块 IDE 编写 C++ 程序

为什么编译不显示缩小警告消息?如何启用它?

注意:我已将编译器选项固定为 -std=c++11 -Wall

0 投票
1 回答
204 浏览

c++ - 列表初始化时需要缩小转换

我在 cpp 参考网站上阅读了有关缩小转换的内容。我有点理解它,但我没有得到的是为什么错误只出现在第一行。

为什么错误只出现在第一行而不是第二行?

0 投票
1 回答
2218 浏览

typescript - 在 if-else 语句中使用 instanceof 将打字稿类型缩小到从不

当我尝试instanceof在 if-else 语句中使用派生类实例时遇到问题。考虑以下示例:

在这里,getValueByName不能objelse部分中调用,因为它已缩小到never。不知何故,Typescript 认为else永远不会执行,但这是错误的。

重要的是要查看函数的覆盖setModel。覆盖具有不同的参数类型,但这些类型继承自基IBaseModel类型。如果我将它们更改为基本类型,Typescript 不会抱怨并且编译得很好:

所以我的问题是,为什么使用不同类型的覆盖会使instanceof操作员将对象的类型缩小到never?这是设计使然吗?

这是使用 Typescript 2.3.4、2.4.1 和 Typescript Playground 测试的。

谢谢!

0 投票
3 回答
340 浏览

javascript - 我可以在 TypeScript 中缩小范围吗?

我有一个实用函数来检查变量是否为空或未定义,如果输入变量通过检查,我希望 TypeScript 缩小输入变量的范围,例如:

正如您所看到的,TS 并没有消除字符串存在的可能性,undefined即使该函数在逻辑上使之成为不可能。有没有办法让这个函数调用缩小块input内的范围if

0 投票
0 回答
54 浏览

typescript - 在 typescript 中使用 lambda 时如何缩小参数类型?

像这样:

我想提取分配给规则的参数number && !==0 or array && array.length!==0 但是我收到了这个错误 在此处输入图像描述

还有其他想法吗?谢谢