Typescript 为什么';t类型脚本错误泛型联合类型? 接口Foo{ bla:T扩展了“whyNoError”?字符串:number; }
预期行为:请参见以下内容: “whyNoError”值永远不会发生 实际:没有错误 既然我指定T扩展了'fo'或'foo',为什么Typescript不将'whyNoError'值标识为never或always false?因为我猜不是这样工作的?这是一个有趣的建议,在条件类型的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',虽然这是一种荒谬的类型,最终简化为从不,但确实会使编译器
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 !!