add.js
function addSex (object) {
object.sex = 'nan'
return object
}
export{addSex}
main.js
import {addSex} from 'add'
var tom = {name:'tom'}
addSex(tom);
tom.//这里出现 sex 提示符
怎么写 add.js 的声明文件或者 jsdoc,官网的教程完全不够日常开发使用. 还是我想多了,根本就没有这个骚操作?
另外,以下代码中 vscode 找不到对象属性的提示:
var tom = {name:'tom'};
Object.defineProperty(tom,'sex',{value:'sex',w:true,e:true,c:true})//忘记拼写了
tom.//这里没有 sex 只有 name
谁来拯救下我啊,实在记不住拼写啊
1
yutou527 2019-03-14 11:10:00 +08:00 1
add.d.ts
```ts declare function addSex(obj: Object): Object; ``` 这样? |
2
yutou527 2019-03-14 11:13:06 +08:00 1
哦 我貌似理解错了
|
3
TomVista OP @yutou527
我现在用的是 type fuseType<a,b> = a & b interface otherData{ sex:string } interface addSex{ new<data>(obj:data):fuseType<data,otherData> } 这样能够实现智能提示,但是不能表明 参数和返回值之间的关系. |
5
yutou527 2019-03-14 11:45:54 +08:00 1
没有找到办法,不知道怎样实现动态的智能提示。
但是你声明了一个 interface OtherData{sex:string} 的话 你可以 ```js /** * @type {OtherData} */ var tom = {name:'tom'} tom.sex ``` 来使 js 支持类型推断,可以得到提示 |
7
maichael 2019-03-14 11:53:19 +08:00 1
TS 是静态类型检查自然做不了动态的事情,你这里应该是给 object 写一个 interface,然后有一个可选的 sex 属性。
|
9
azh7138m 2019-03-14 12:01:25 +08:00 1
静态类型+1
建议同楼上 |
10
maichael 2019-03-14 12:05:47 +08:00 1
不过你这里也不是不可以的,它其实并不动态,当然如果你要更动态的需求就不行了。
```typescript const addText = <T>(object:T) : Test & T => { return { ...object, sex:'text' } } const obj = {a:1} const b = addText(obj) b.sex ``` |
11
maichael 2019-03-14 12:06:24 +08:00 1
|
12
viko16 2019-03-14 12:44:23 +08:00 via Android 1
你问的不是 ts 的问题,应该是 vscode 写 js 如何做到智能提示吧?
https://github.com/Microsoft/TypeScript/wiki/JSDoc-support-in-JavaScript |
14
maplelin 2019-03-14 15:52:07 +08:00
声明一个对象类型,包含你要添加的属性,可以加?设置为可选属性
|
15
maplelin 2019-03-14 15:52:46 +08:00
这样应该在提示的时候就有对应的属性选项了
|
18
otakustay 2019-03-14 17:08:59 +08:00
ts 就是为了让你别写出这种往已有对象上丢个属性的事情而存在的
|