Hen*_*aye 0 javascript typescript
if (process.env.NODE_ENV !== 'production') {
(WithUser as any).displayName = wrapDisplayName(Component, 'withUser');
}
Run Code Online (Sandbox Code Playgroud)
我不确定as是否是关键字。但是“ as”关键字在js中有什么作用?
小智 34
它是 TypeScript,不是 vanilla JS,而是as它本身:它被称为Type Assertion,您只是告诉编译器将某些东西视为一种类型:
var a = 'TEST STRING'
var b = a as string; //Means the compiler will assume it's a string
Run Code Online (Sandbox Code Playgroud)
这相当于:
var a = 'TEST STRING'
var b = <string> a;
Run Code Online (Sandbox Code Playgroud)
但是,在使用 JSX (JS with html tags) 时可能会令人困惑,因此在这些情况下,as首选语法。
Was*_*bey 14
这是一个 Typescript 运算符,它在 ECMAScript 2015(最新版本的 Javascript)中不可用
正如上面的答案所示,“as”运算符是类型断言的一种形式
举一个简短的例子,假设你有两种类型:第一和第二。您正在编写一个方法,而该方法并不完全知道您的对象属于哪种类型。它可以是 First 或 Second 类型。
因此,您声明的变量没有严格类型。一旦您的方法知道您的变量应该采用的类型,您就可以将其“作为该类型”返回。
这看起来有点含糊不清,但 'as' 运算符实际上执行与另一个(更熟悉的)模式完全相同的功能:
这两段代码做的完全一样
let accountCode = '123';
let castedAccountCode = <number>accountCode;
Run Code Online (Sandbox Code Playgroud)
用作关键字:
let accountCode = '123';
let castedAccountCode = accountCode as number;
Run Code Online (Sandbox Code Playgroud)
小智 7
这种类型断言是没有用的,因为
function foo (a: string, b: string): number {
return (a as number) + (b as number)
}
Run Code Online (Sandbox Code Playgroud)
简单地转换为
function foo(a, b) {
return a + b;
}
Run Code Online (Sandbox Code Playgroud)
我首先期望它是这样的
function foo(a, b) {
if (typeof a != 'string') throw ...
if (typeof b != 'string') throw ...
return Number(a) + Number(b)
}
Run Code Online (Sandbox Code Playgroud)
但不是。TS 给用户一种错误的安全感。
那不是普通的JavaScript,而是TypeScript。以任何方式将类型化的对象视为普通的无类型JavaScrpt对象。
该as关键字是类型断言在打字稿它告诉编译器考虑对象作为另一种类型的除型编译器推断所述对象是。
as在提供的 OP 示例中,as关键字用于Type Assertion。在 TypeScript 4.1 及更高版本中,as关键字不仅可以用于类型断言,还可以用于键映射。这允许您重新映射类型的键。例如:
type Person = {
name: string;
age: number;
};
type Getters<T> = {
[K in keyof T as `get${Capitalize<K & string>}`]: () => T[K];
};
type MappedPerson = Getters<Person>;
// type MappedPerson = {
// getName: () => string;
// getAge: () => number;
// }
Run Code Online (Sandbox Code Playgroud)
通用和模板文字类型在这里确实很出色。键映射是一个非常强大的功能,因为您还可以将键映射到其值的类型。例如,在条件类型的帮助下,可以通过键对应值的类型来过滤对象属性。假设我们要删除number该Person类型的所有类型属性:
type WithoutPropertiesOfTypeNumber<T> = {
[K in keyof T as T[K] extends number ? never : K]: T[K];
};
type PersonWithoutPropertiesOfTypeNumbers =
WithoutPropertiesOfTypeNumber<Person>;
// type PersonWithoutPropertiesOfTypeNumbers = {
// name: string;
// }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1290 次 |
| 最近记录: |