我有一个泛型方法
class Foo {
public static bar<T>(x: T): T {
...
if(x === null)
return null; //<------- syntax error
...
}
}
... //somewhere
const x = Foo.bar<number | null>(1);
我得到了语法错误
TS2322:类型“null”不能赋给类型“T”。
我期待这个编译,因为T
可以是null
。
解决这个问题的正确方法是什么
7条答案
按热度按时间tpgth1q71#
您必须在tsconfig中将返回类型声明为
null
或关闭strictNullChecks
或者您可以键入null
as any
,例如bjg7j2ky2#
从版本3.9.5开始,TypeScript会在
numbers
和strings
上强制strictNullChecks
。例如,下面的代码将在编译期间抛出错误:要避免此错误,您有两个选择:
tsconfig.json
中设置strictNullChecks=false
。any
:pgpifvop3#
你可以把
对我很有效
oipij1gg4#
我在这里建议使用函数重载来消除参数不可为空的情况。
因此,实现具有类型
T | null
,但由于类型重载从不为空,因此返回类型为T
,因此不存在空的可能性。mec1mxoz5#
我也遇到过同样的问题,我发现这实际上是关于 typescript 当前的局限性。
当前无法通过检查类似value的值来缩小类似T的类型参数的范围。
参见https://stackoverflow.com/a/68898908/10694438。
bq3bfh9z6#
年份:数量;月份:编号;
构造函数(专用路由:ActivatedRoute){ }
ngOnInit(){让参数=这个.路由.快照.参数Map;此年份= +参数.get('年份')!这个月= +参数.get('月')!;
}
j13ufse27#
将变量赋值为
undefined
,而不是null
。