我有办法直接将类型注释应用于对象文字吗?直接我的意思是不必将其分配给注释类型的变量.例如:我知道我可以这样做:
export interface BaseInfo { value: number; }
export interface MyInfo extends BaseInfo { name: string; }
function testA(): BaseInfo = {
const result: MyInfo = { value: 1, name: 'Hey!' };
return result;
}
Run Code Online (Sandbox Code Playgroud)
我也可以这样做:
function testB(): BaseInfo = {
return { value: 1, name: 'Hey!' };
}
Run Code Online (Sandbox Code Playgroud)
但我需要的是:
function testC(): BaseInfo = {
return { value: 1, name: 'Hey!' }: MyInfo; // <--- doesn't work
}
Run Code Online (Sandbox Code Playgroud)
或者像这样:
function testD(): BaseInfo = {
return MyInfo: { value: 1, name: 'Hey!' }; // <--- doesn't work
}
Run Code Online (Sandbox Code Playgroud)
Rya*_*ugh 16
对象文字成员的Intellisense由表达式的上下文类型(参见规范的第4.19节)提供.
您可以通过各种方式获取上下文类型.应用上下文类型的一些最常见的地方是:
return具有返回类型注释的函数或getter 中的语句中的表达式<T>expr)在您的示例中,您可以使用类型断言来强制您的对象文字具有上下文类型:
function testB() {
return <IMyInfo>{ name: 'Hey!' };
}
Run Code Online (Sandbox Code Playgroud)
Tri*_*Gao 11
答案是使用身份功能:
function to<T>(value: T): T { return value; }
const instance = to<MyInfo>({
value: 1,
name: 'Hey!',
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11927 次 |
| 最近记录: |