这是我在使用 TypeScript 过程中的观察总结。
下面是一些代码:
我们已经得到一个错误,指出
以下是第二个案例:
为什么我们有 T & "1" 而不只是 "1",我们明确声明它是某个类型枚举。
我非常好奇为什么要做出这样的决定。如果能够看到以不同方式完成的情况下会发生什么问题,那将非常有帮助。
下面是一些代码:
type someTypeEnum = '1';
type someOtherTypeEnum = '2' | '3';
type combinedTypeEnum = someTypeEnum | someOtherTypeEnum;
以下是第一个案例:
function typeAssertion<T extends combinedTypeEnum>(args: T): args is someTypeEnum {
// The error i get
// A type predicate's type must be assignable to its parameter's type.
// Type '"1"' is not assignable to type 'T'.
return undefined;
}
我不理解为什么这个东西会失败,因为我们已经将参数限制为combinedTypeEnum,以防万一我们执行...
typeAssertion('4')
我们已经得到一个错误,指出
'4'
不是一个有效的参数,那么为什么args is someTypeEnum
被认为是无效的谓词。以下是第二个案例:
function typeAssertion(args: combinedTypeEnum): args is someTypeEnum {
return undefined;
}
这似乎很正常,但如果我们这样做:-
function someFunction<T extends combinedTypeEnum>(args: T): T {
if (typeAssertion(args)) {
// args here is 'T & "1"'
args
}
return args
};
为什么我们有 T & "1" 而不只是 "1",我们明确声明它是某个类型枚举。
我非常好奇为什么要做出这样的决定。如果能够看到以不同方式完成的情况下会发生什么问题,那将非常有帮助。