默认泛型可作为参数正常使用,但不能作为函数参数的返回类型使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了默认泛型可作为参数正常使用,但不能作为函数参数的返回类型使用相关的知识,希望对你有一定的参考价值。
我已经设法对类型A的泛型使用默认值,并且在将其用作对象参数(函数c)时可以很好地工作,但是,如果我尝试将其用作传入的函数参数(函数d)Object literal may only specify known properties, and 'ping' does not exist in type 'B'.
type A = foo: string
type B = bar: string
function c<T = A, InferredType extends T = T>(config: InferredType): void
function d<T = A, InferredType extends T = T>(config: () => InferredType): void
c( foo: 'foo' );
c( bar: 'bar' ); // Correctly errors
c<A>( bar: 'bar' ); // Correctly errors
c<B>( bar: 'bar' );
c<B>( bar: 'bar', ping: 'ping' ); // Correctly errors
d(() => ( foo: 'foo' ));
d(() => ( bar: 'bar' )); // Correctly errors
d<A>(() => ( bar: 'bar' )); // Correctly errors
d<B>(() => ( bar: 'bar' ));
d<B>(() => ( bar: 'bar', ping: 'ping' )); // Should error with unknown property but doesn't
d<B>((): B => ( bar: 'bar', ping: 'ping' )); // Errors correctly but requires duplicate type
如果您第二遍指定类型(B),如您在最后一行看到的那样,它会按预期工作,但是这违背了首先使用泛型的目的。
这是打字稿本身的问题,还是我在这里遗漏了什么?
答案
我一直在调查您的问题,据我所知,它应该像那样工作。
以上是关于默认泛型可作为参数正常使用,但不能作为函数参数的返回类型使用的主要内容,如果未能解决你的问题,请参考以下文章
Java 泛型与 C++ 模板有何不同?为啥我不能使用 int 作为参数?