推荐答案
// www.javascriptcn.com code example
function isString(value: any): value is string {
return typeof value === 'string';
}
function example(value: string | number) {
if (isString(value)) {
// 在这个块中,TypeScript 知道 `value` 是 `string` 类型
console.log(value.toUpperCase());
} else {
// 在这个块中,TypeScript 知道 `value` 是 `number` 类型
console.log(value.toFixed(2));
}
}本题详细解读
is 关键字的作用
is 关键字在 TypeScript 中用于定义类型谓词(Type Predicates)。类型谓词是一种特殊的函数返回值类型注解,它用于在运行时检查某个值是否属于特定类型,并在编译时帮助 TypeScript 缩小类型范围。
类型谓词的语法
类型谓词的语法如下:
function isTypeName(value: any): value is TypeName {
// 返回一个布尔值,表示 `value` 是否是 `TypeName` 类型
}其中:
value是要检查的值。TypeName是你希望value属于的类型。value is TypeName是类型谓词,表示如果函数返回true,则value是TypeName类型。
如何使用类型谓词缩小类型范围
类型谓词的主要作用是帮助 TypeScript 在条件语句中缩小变量的类型范围。通过使用类型谓词,你可以在特定的代码块中让 TypeScript 知道某个变量的确切类型。
例如:
// www.javascriptcn.com code example
function isString(value: any): value is string {
return typeof value === 'string';
}
function example(value: string | number) {
if (isString(value)) {
// 在这个块中,TypeScript 知道 `value` 是 `string` 类型
console.log(value.toUpperCase());
} else {
// 在这个块中,TypeScript 知道 `value` 是 `number` 类型
console.log(value.toFixed(2));
}
}在这个例子中:
isString函数是一个类型谓词,它检查value是否是string类型。- 在
example函数中,if (isString(value))语句告诉 TypeScript,如果isString(value)返回true,则value是string类型,因此在if块中可以使用string类型的方法(如toUpperCase)。 - 在
else块中,TypeScript 知道value不是string类型,因此它必须是number类型,可以使用number类型的方法(如toFixed)。