Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 为什么';t类型脚本错误泛型联合类型? 接口Foo{ bla:T扩展了“whyNoError”?字符串:number; }_Typescript_Generics_Interface_Extends - Fatal编程技术网

Typescript 为什么';t类型脚本错误泛型联合类型? 接口Foo{ bla:T扩展了“whyNoError”?字符串:number; }

Typescript 为什么';t类型脚本错误泛型联合类型? 接口Foo{ bla:T扩展了“whyNoError”?字符串:number; },typescript,generics,interface,extends,Typescript,Generics,Interface,Extends,预期行为:请参见以下内容: “whyNoError”值永远不会发生 实际:没有错误 既然我指定T扩展了'fo'或'foo',为什么Typescript不将'whyNoError'值标识为never或always false?因为我猜不是这样工作的?这是一个有趣的建议,在条件类型的string部分有一个“不可访问的代码”错误,但我无法想象有人会非常关心它的实现 从技术上和学究的角度来看,我可以指出,T可能是'fo'和'whyNoError',虽然这是一种荒谬的类型,最终简化为从不,但确实会使编译器

预期行为:请参见以下内容:

“whyNoError”值永远不会发生

实际:没有错误

既然我指定T扩展了'fo'或'foo',为什么Typescript不将'whyNoError'值标识为never或always false?

因为我猜不是这样工作的?这是一个有趣的建议,在条件类型的
string
部分有一个“不可访问的代码”错误,但我无法想象有人会非常关心它的实现

从技术上和学究的角度来看,我可以指出,
T
可能是
'fo'和'whyNoError'
,虽然这是一种荒谬的类型,最终简化为
从不
,但确实会使编译器走上一条你可能会感到惊讶的道路:

interface Foo<T extends 'fo' | 'foo'> {
  bla: T extends 'whyNoError?' ? string : number;
}
接口Foo{
bla:T扩展了“whyNoError”?字符串:number;
}
声明常量foo:foo;
const str=foo.bla;//一串
这不是一个非常令人满意的答案,因为可能没有人希望支持这种愚蠢的交叉点,但需要注意的是,实现您所要求的内容而不必担心这种边缘情况并非小事

希望有帮助;祝你好运

interface Foo<T extends 'fo' | 'foo'> {
  bla: T extends 'whyNoError?' ? string : number;
}
declare const foo: Foo<'fo' & 'whyNoError?'>;
const str = foo.bla; // string !!